Ошибка ClickOnce setup.exe, но файл приложения работает нормально при использовании общего ресурса Windows для развертывания. - PullRequest
22 голосов
/ 16 августа 2011

Я получаю ошибку System.Deployment.Application.DeploymentDownloadException при попытке запустить setup.exe для моего приложения ClickOnce.Если запустить его по сети из исходного местоположения, он работает нормально, но если я копирую 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)

Я видел несколько решений , но все онискажите, что решение состоит в том, чтобы изменить тип MIME на IIS. IIS не установлен на сервере, на котором размещены файлы.

Что еще можно сделать, чтобы исправить это, кроме «изменения типов MIME»?


ОБНОВЛЕНИЕ

См. Второй пост в этой теме для некоторых тестовых случаев, которые я выполнил.Вкратце: похоже, что файл setup.exe использует рабочий каталог для загрузки своих файлов, так как он работает нормально, когда я запускаю EXE-файл по сети, однако происходит сбой, если я копирую EXE на свой локальный диск.

Как мне решить эту проблему, кроме «Сказать людям просто запустить его по сетевому пути»?


ОБНОВЛЕНИЕ2: Глядя на файл setup.exe с помощью шестнадцатеричного редактора, я не смогнайдите мой путь установки где-нибудь в нем.Когда я изменил путь установки на http://example.com/Test, мне было легко его найти.

Это ошибка Visual Studio, которая не сохраняет местоположение публикации / путь установки, если вы используете UNC путь?

Ответы [ 2 ]

26 голосов
/ 23 августа 2011

Как я понимаю, файл 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 на рабочий стол, и это сработало. Таким образом, кажется, что если вы хотите установить его откуда-то, кроме сетевой папки, вам просто нужно убедиться, что в нем есть оба файла.

Другие вещи, которые нужно проверить, если у вас нет загрузки предварительных требований с веб-сайта продавцов, затем убедитесь, что он указывает на статическое место, или, по крайней мере, убедитесь, что вы копируете эти файлы тоже.

В мастере публикации на странице How will users install the application? I selected From a CD-ROM or DVD-Rom. Я не знаю, может ли выбор одного из двух других вариантов изменить его работу.

Edit:
Я прочитал ваш другой пост. Я подозреваю, что это связано с тем, как различные протоколы обрабатывают файлы. Мне удалось заставить его работать со страницы publish.html, но я фактически опубликовал его на веб-сервере, так что адрес страницы был http://www.example.com/programs/publish.html.

Я попытался запустить его с n:\webroot\programs\publish.html, но это не удалось.

У вас есть способ опубликовать его на веб-сервере? Или хотя бы установите IIS или Apache , чтобы превратить его в веб-сервер?

Либо просто убедитесь, что у всех есть необходимые условия, а затем попросите их щелкнуть ссылку launch :

Enter image description here

Редактировать 2:

Вот мои настройки публикации. Это работает, нажав на кнопку установки в Internet Explorer, Firefox и Chrome (все, что я тестировал).

Enter image description here

Enter image description here

Похоже, файл установки ищет на сайте файл .application, поэтому его не нужно размещать на локальном компьютере.

Редактировать 3:

В Windows (проверено XP и Windows 7):
* Шаг 1: меню Пуск -> Выполнить
* Шаг 2: введите «iexpress» без ‘
* Шаг 3: Следуйте за волшебником.

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

Enter image description here

Как только это будет сделано, вы можете просто создать свою собственную HTML страницу, указывающую на ваш установочный EXE-файл. Единственное, с чем я столкнулся, было то, что установка не работала с первого раза каждый раз. Я запустил его, и он не извлек файлы. Затем я сразу же запустил его во второй раз, и он работал просто отлично ... Я пока не знаю, почему.

2 голосов
/ 24 августа 2011

Мы используем самораспаковывающийся файл ZIP для запуска нашей установки. (Есть много способов сделать это, например, использовать 7-Zip , WinZip и т. Д.) Таким образом, для загрузки доступен только 1 файл.

Но я не уверен, как вы будете обрабатывать обновления в этом сценарии - я предполагаю, что вы могли бы опубликовать как ClickOnce, так и самозапускающийся ZIP-файл, чтобы приложение впоследствии находило необходимые файлы ...

Надеюсь, это поможет.

...