【问题标题】:ClickOnce setup.exe fails, but the .application file works fine when using a Windows share for deploymentClickOnce setup.exe 失败,但 .application 文件在使用 Windows 共享进行部署时工作正常
【发布时间】:2011-08-16 17:31:32
【问题描述】:

当我尝试为 ClickOnce 应用程序运行 setup.exe 时,我收到了 System.Deployment.Application.DeploymentDownloadException 的错误。如果从其原始位置通过网络运行它,它工作正常,但如果我从服务器上的路径复制setup.exe,我会收到错误

无法下载应用程序。应用程序缺少必需的文件。

我需要设置,因为它会安装一些最终用户可能没有的先决条件 (.NET 4)。

单击错误窗口中的详细信息按钮会显示以下信息:

PLATFORM VERSION INFO
    Windows             : 6.1.7601.65536 (Win32NT)
    Common Language Runtime     : 4.0.30319.237
    System.Deployment.dll       : 4.0.30319.1 (RTMRel.030319-0100)
    clr.dll             : 4.0.30319.237 (RTMGDR.030319-2300)
    dfdll.dll           : 4.0.30319.1 (RTMRel.030319-0100)
    dfshim.dll          : 4.0.31106.0 (Main.031106-0000)

SOURCES
    Deployment url          : file:///C:/Users/srchamberlain/Downloads/ContractFlowTool.application

ERROR SUMMARY
    Below is a summary of the errors, details of these errors are listed later in the log.
    * Activation of C:\Users\srchamberlain\Downloads\ContractFlowTool.application resulted in exception. Following failure messages were detected:
        + Downloading file:///C:/Users/srchamberlain/Downloads/ContractFlowTool.application did not succeed.
        + Could not find file 'C:\Users\srchamberlain\Downloads\ContractFlowTool.application'.
        + Could not find file 'C:\Users\srchamberlain\Downloads\ContractFlowTool.application'.
        + Could not find file 'C:\Users\srchamberlain\Downloads\ContractFlowTool.application'.

COMPONENT STORE TRANSACTION FAILURE SUMMARY
    No transaction error was detected.

WARNINGS
    There were no warnings during this operation.

OPERATION PROGRESS STATUS
    * [8/16/2011 12:23:26 PM] : Activation of C:\Users\srchamberlain\Downloads\ContractFlowTool.application has started.

ERROR DETAILS
    Following errors were detected during this operation.
    * [8/16/2011 12:23:26 PM] System.Deployment.Application.DeploymentDownloadException (Unknown subtype)
        - Downloading file:///C:/Users/srchamberlain/Downloads/ContractFlowTool.application did not succeed.
        - Source: System.Deployment
        - Stack trace:
            at System.Deployment.Application.SystemNetDownloader.DownloadSingleFile(DownloadQueueItem next)
            at System.Deployment.Application.SystemNetDownloader.DownloadAllFiles()
            at System.Deployment.Application.FileDownloader.Download(SubscriptionState subState)
            at System.Deployment.Application.DownloadManager.DownloadManifestAsRawFile(Uri& sourceUri, String targetPath, IDownloadNotification notification, DownloadOptions options, ServerInformation& serverInformation)
            at System.Deployment.Application.DownloadManager.DownloadDeploymentManifestDirectBypass(SubscriptionStore subStore, Uri& sourceUri, TempFile& tempFile, SubscriptionState& subState, IDownloadNotification notification, DownloadOptions options, ServerInformation& serverInformation)
            at System.Deployment.Application.DownloadManager.DownloadDeploymentManifestBypass(SubscriptionStore subStore, Uri& sourceUri, TempFile& tempFile, SubscriptionState& subState, IDownloadNotification notification, DownloadOptions options)
            at System.Deployment.Application.ApplicationActivator.PerformDeploymentActivation(Uri activationUri, Boolean isShortcut, String textualSubId, String deploymentProviderUrlFromExtension, BrowserSettings browserSettings, String& errorPageUrl)
            at System.Deployment.Application.ApplicationActivator.ActivateDeploymentWorker(Object state)
        --- Inner Exception ---
        System.Net.WebException
        - Could not find file 'C:\Users\srchamberlain\Downloads\ContractFlowTool.application'.
        - Source: System
        - Stack trace:
            at System.Net.FileWebRequest.EndGetResponse(IAsyncResult asyncResult)
            at System.Net.FileWebRequest.GetResponse()
            at System.Deployment.Application.SystemNetDownloader.DownloadSingleFile(DownloadQueueItem next)
        --- Inner Exception ---
        System.Net.WebException
        - Could not find file 'C:\Users\srchamberlain\Downloads\ContractFlowTool.application'.
        - Source: System
        - Stack trace:
            at System.Net.FileWebResponse..ctor(FileWebRequest request, Uri uri, FileAccess access, Boolean asyncHint)
            at System.Net.FileWebRequest.GetResponseCallback(Object state)
        --- Inner Exception ---
        System.IO.FileNotFoundException
        - Could not find file 'C:\Users\srchamberlain\Downloads\ContractFlowTool.application'.
        - Source: mscorlib
        - Stack trace:
            at System.IO.__Error.WinIOError(Int32 errorCode, String maybeFullPath)
            at System.IO.FileStream.Init(String path, FileMode mode, FileAccess access, Int32 rights, Boolean useRights, FileShare share, Int32 bufferSize, FileOptions options, SECURITY_ATTRIBUTES secAttrs, String msgPath, Boolean bFromProxy, Boolean useLongPath)
            at System.IO.FileStream..ctor(String path, FileMode mode, FileAccess access, FileShare share, Int32 bufferSize, FileOptions options, String msgPath, Boolean bFromProxy)
            at System.IO.FileStream..ctor(String path, FileMode mode, FileAccess access, FileShare share, Int32 bufferSize, Boolean useAsync)
            at System.Net.FileWebStream..ctor(FileWebRequest request, String path, FileMode mode, FileAccess access, FileShare sharing, Int32 length, Boolean async)
            at System.Net.FileWebResponse..ctor(FileWebRequest request, Uri uri, FileAccess access, Boolean asyncHint)

COMPONENT STORE TRANSACTION DETAILS
    No transaction information is available.

问题的根源是它试图从与运行setup.exe 相同的路径下载其文件(在这种情况下为file:///C:/Users/srchamberlain/Downloads),而不是实际部署URL\\fs1\contractflowtool

我见过fewsolutions,但他们都告诉我解决方案是在IIS 上更改MIME 类型。 托管文件的服务器上未安装 IIS。

除了“更改 MIME 类型”之外,还有什么办法可以解决这个问题?


更新

请参阅this thread 中的第二篇文章,了解我运行的一些测试用例。总结是:setup.exe 文件似乎使用工作目录来下载其文件,因为当我通过网络运行 EXE 文件时它工作正常,但是如果我将 EXE 复制到本地磁盘则会失败。

除了“告诉人们只从网络路径运行它”之外,我该如何解决这个问题?


更新2: 用十六进制编辑器查看setup.exe 文件,我在其中的任何地方都找不到我的安装路径。当我将安装路径更改为http://example.com/Test 时,我很容易找到它。

如果您使用UNC 路径,它不会保存发布位置/安装路径是 Visual Studio 的错误吗?

【问题讨论】:

    标签: .net .net-4.0 clickonce


    【解决方案1】:

    据我了解,Setup.exe 文件不包含您的应用程序;这就是 Visual Studio 安装先决条件的方式,然后它会运行您的 .application 文件来实际安装您的应用程序。

    我用我自己的一个应用程序对此进行了测试。首先,我只复制了 setup.exe 并得到了与您相同的错误:

    ERROR SUMMARY
        Below is a summary of the errors, details of these errors are listed later in the log.
        * Activation of C:\Users\Andy\Desktop\Video Uploader.application resulted in exception. Following failure messages were detected:
            + Downloading file:///C:/Users/Andy/Desktop/Video Uploader.application did not succeed.
            + Could not find file 'C:\Users\Andy\Desktop\Video Uploader.application'.
            + Could not find file 'C:\Users\Andy\Desktop\Video Uploader.application'.
            + Could not find file 'C:\Users\Andy\Desktop\Video Uploader.application'.
    

    然后我将Video Uploader.application 也复制到了我的桌面上,它工作正常。所以看起来如果你想从网络共享以外的地方安装它,你只需要确保它有两个文件。

    要检查的其他事项,如果您没有从供应商网站下载 prereqs,请确保它指向静态位置,或者至少确保您也复制这些文件。

    在发布向导的How will users install the application? 页面上,I selected From a CD-ROM or DVD-Rom。我不知道选择其他两个选项中的任何一个是否会改变它的工作方式。

    编辑:
    我读过你的另一篇文章。我怀疑这与不同协议处理文件的方式有关。我能够从publish.html 页面让它工作,但我实际上将它发布到了一个网络服务器,所以页面地址是http://www.example.com/programs/publish.html

    我尝试从n:\webroot\programs\publish.html 运行它,但失败了。

    你有办法将它发布到网络服务器吗?或者至少安装IISApache 使其成为网络服务器?

    或者,只需确保每个人都具备先决条件,然后让他们点击启动链接:

    编辑 2:

    这是我的发布设置。它通过点击 Internet Explorer、Firefox 和 Chrome 中的安装按钮来工作(我都测试过)。

    似乎安装文件正在网站上查找.application 文件,因此它不需要在本地计算机上。

    编辑 3:

    在 Windows 中(已验证 XP 和 Windows 7):
    * 第 1 步:开始菜单 –> 运行
    * 第 2 步:输入不带“
    ”的“iexpress” * 第 3 步:跟随向导。

    http://expertester.wordpress.com/2008/07/11/create-self-extractinginstaller-for-free/

    一旦完成,您就可以创建自己的HTML 页面,指向您的安装程序EXE 文件。 我遇到的唯一一件事是每次第一次安装都没有成功。我运行它,它没有提取文件。然后我立即运行了第二次,它工作得很好......我还不知道为什么。

    【讨论】:

    • 我的主要问题是,如果您使用除 IE 之外的任何其他浏览器,安装链接会提示您将 exe 保存到本地硬盘。此外,如果应用程序没有由计算机信任的证书签名,它不会让您在 IE 中使用安装链接,您会得到一个 InvalidDeploymentExeption 详细信息 Your Web browser settings do not allow you to run unsigned applications.
    • 您可以自签名,即使是测试证书也可以。我刚刚创建了一个测试应用程序,winform 上的单个标签,使用 Create Test Certificate 选项对其进行签名,将发布和安装文件夹位置放入,在 Publish->Options->Deployment 下键入一个部署网页,发布,然后在 Firefox 中打开该页面,单击安装,等待安装文件下载,运行它,它按预期工作。在单独的机器上验证。唯一奇怪的是,窗口会弹出一条消息,询问它是否安装正确。
    • 问题是您要发布到某种形式的 Web 服务器,这里的 IT 部门不想为我设置一个,所以我无法使用 UNC 路径作为安装目录。
    • 我给了你分数,因为你是最有帮助的,并且给出了非常详细的答案。我想我需要将 Pizza 和 6 件装添加到我的应用程序调试工具工具箱中。
    • 作为更新,我做了report this,开发人员将其标记为“按设计关闭”。 Sigh...
    【解决方案2】:

    我们使用自解压的ZIP 文件来启动我们的安装。 (有很多方法可以做到这一点,例如使用7-ZipWinZip等) 这样就只有1个文件可以下载了。

    但我不确定在这种情况下您将如何处理更新 - 我假设您可以同时发布 ClickOnce 和自解压 ZIP 文件,以便应用程序在之后找到必要的文件...

    我希望这会有所帮助。

    【讨论】:

    • 虽然这似乎是一个漫长的过程,但我发现它是唯一能够运行 setup.exe 并让它找到 xxx.application 文件的解决方案。感谢您解决此问题。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-03-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多