2014-09-15 8 views
1

Я развертываю приложение WPF в бизнес-среде (AD) с помощью развертывания clickonce. Приложение разрабатывается с помощью Visual Studio 2013 и основано на .Net 4.5. Развертывание предназначено только для машин Windows 7. Сервер развертывания использует IIS 7.5 и работает на Windows Server 2008 R2.прерывистый сбой при развертывании clickonce (0x8007001F)

В развертывании настроено, что приложения проверяют наличие обновлений до запуска приложений.

Развертывание работает, по крайней мере, большую часть времени, но я недавно испытывал случайные проблемы на нескольких машинах при установке обновления приложения.

Пользователь получает следующее сообщение об ошибке:

Application cannot be started. Contact the application publisher.

Cannot start the application. Contact the application vendor for assistance.

эта ошибка является документом в MSDN, Troubleshooting Specific Errors in ClickOnce Deployments

These are generic error messages that occur when the application cannot be started, and no other specific reason can be found.

мне удалось собрать файл журнала, который покрывает эту ошибку:

PLATFORM VERSION INFO 
Windows      : 6.1.7601.65536 (Win32NT) 
Common Language Runtime  : 4.0.30319.18444 
System.Deployment.dll   : 4.0.30319.18408 built by: FX451RTMGREL 
clr.dll      : 4.0.30319.18444 built by: FX451RTMGDR 
dfdll.dll      : 4.0.30319.18408 built by: FX451RTMGREL 
dfshim.dll     : 4.0.41209.0 (Main.041209-0000) 

SOURCES 
    Deployment url: file:///C:/Users/ADUSERNAME/AppData/Roaming/Microsoft/Windows/Start%20Menu/Programs/Supply%20Chain%20Services%20-%20Systems%20and%20Processes/APPLICATIONNAME/APPLICATIONNAME%20Suite.appref-ms%7C 
    Server: Microsoft-IIS/7.5 
    X-Powered-By: ASP.NET 
    Deployment Provider url: http://SERVERNAME:PORT/APPLICATIONNAME.application 
    Application url: http://SERVERNAME:PORT/Application%20Files/APPLICATIONNAME_1_0_3_9/APPLICATIONNAME.exe.manifest 
    Server: Microsoft-IIS/7.5 
    X-Powered-By: ASP.NET 

IDENTITIES 
    Application Identity: APPLICATIONNAME.exe, Version=1.0.3.9, Culture=neutral, PublicKeyToken=XXXXXXXXXXXXXXXX, processorArchitecture=msil, type=win32 

ERROR SUMMARY 
    Below is a summary of the errors, details of these errors are listed later in the log. 
    * Activation of C:\Users\ADUSERNAME\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Supply Chain Services - Systems and Processes\APPLICATIONNAME\APPLICATIONNAME Suite.appref-ms| resulted in exception. Following failure messages were detected: 
        + A device attached to the system is not functioning. (Exception from HRESULT: 0x8007001F) 

COMPONENT STORE TRANSACTION FAILURE SUMMARY 
    No transaction error was detected. 

WARNINGS 
    There were no warnings during this operation. 

OPERATION PROGRESS STATUS 
    * [08/09/2014 09:25:02] : Activation of C:\Users\ADUSERNAME\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Supply Chain Services - Systems and Processes\APPLICATIONNAME\APPLICATIONNAME Suite.appref-ms| has started. 
    * [08/09/2014 09:25:04] : Performing necessary update check as specified by the deployment. 
    * [08/09/2014 09:25:07] : Consuming new update. 
    * [08/09/2014 09:25:09] : Installation of the application has started. 
    * [08/09/2014 09:25:10] : Processing of application manifest has successfully completed. 
    * [08/09/2014 09:25:10] : Found compatible runtime version 4.0.30319. 
    * [08/09/2014 09:25:10] : Request of trust and detection of platform is complete. 
    * [08/09/2014 09:25:18] : Downloading of subscription dependencies is complete. 
    * [08/09/2014 09:25:18] : Commit of the downloaded application has started. 

ERROR DETAILS 
    Following errors were detected during this operation. 
    * [08/09/2014 09:25:22] System.Runtime.InteropServices.COMException 
        - A device attached to the system is not functioning. (Exception from HRESULT: 0x8007001F) 
        - Source: System.Deployment 
        - Stack trace: 
            at System.Deployment.Internal.Isolation.IStore.Transact(IntPtr cOperation, StoreTransactionOperation[] rgOperations, UInt32[] rgDispositions, Int32[] rgResults) 
            at System.Deployment.Application.ComponentStore.SubmitStoreTransaction(StoreTransactionContext storeTxn, SubscriptionState subState) 
            at System.Deployment.Application.ComponentStore.CommitApplication(SubscriptionState subState, CommitApplicationParams commitParams) 
            at System.Deployment.Application.SubscriptionStore.CommitApplication(SubscriptionState& subState, CommitApplicationParams commitParams) 
            at System.Deployment.Application.ApplicationActivator.InstallApplication(SubscriptionState& subState, ActivationDescription actDesc) 
            at System.Deployment.Application.ApplicationActivator.ConsumeUpdatedDeployment(SubscriptionState& subState, ActivationDescription actDesc) 
            at System.Deployment.Application.ApplicationActivator.PerformDeploymentUpdate(SubscriptionState& subState, String& errorPageUrl) 
            at System.Deployment.Application.ApplicationActivator.ProcessOrFollowShortcut(String shortcutFile, String& errorPageUrl, TempFile& deployFile) 
            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) 

COMPONENT STORE TRANSACTION DETAILS 
    * Transaction at [08/09/2014 09:25:22] 
        + System.Deployment.Internal.Isolation.StoreOperationStageComponent 
            - Status: Installed 
            - HRESULT: 0x0 
            - Manifest: ZJHPL38T.V57.application 
        + System.Deployment.Internal.Isolation.StoreOperationSetDeploymentMetadata 
            - Status: Set 
            - HRESULT: 0x0 
        + System.Deployment.Internal.Isolation.StoreOperationStageComponent 
            - Status: Installed 
            - HRESULT: 0x0 
            - Manifest: APPLICATIONNAME.exe.manifest 
        + System.Deployment.Internal.Isolation.StoreOperationStageComponentFile 
            - Status: Installed 
            - HRESULT: 0x0 
            - File: APPLICATIONNAME.exe.config 
        !!! Removed 550 Lines !!! 
        + System.Deployment.Internal.Isolation.StoreOperationInstallDeployment 
            - Status: Installed 
            - HRESULT: 0x0 
            - AppId: http://SERVERNAME:PORT/APPLICATIONNAME.application#APPLICATIONNAME.application, Version=1.0.3.9, Culture=neutral, PublicKeyToken=e5b020d18338a5ca, processorArchitecture=msil 
        + System.Deployment.Internal.Isolation.StoreOperationSetDeploymentMetadata 
            - Status: Set 
            - HRESULT: 0x0 
        + System.Deployment.Internal.Isolation.StoreOperationUninstallDeployment 
            - Status: Uninstalled 
            - HRESULT: 0x0 
            - AppId: http://SERVERNAME:PORT/APPLICATIONNAME.application#APPLICATIONNAME.application, Version=1.0.3.3, Culture=neutral, PublicKeyToken=e5b020d18338a5ca, processorArchitecture=msil 
        + System.Deployment.Internal.Isolation.StoreOperationSetDeploymentMetadata 
            - Status: Set 
            - HRESULT: 0x0 
        + System.Deployment.Internal.Isolation.StoreTransactionOperationType (27) 
            - HRESULT: 0x8007001f 

Я также активировал подробное ведение журнала (using this guide) для моего но я не смог воспроизвести эту ошибку или распознал шаблон, который вызывает ошибку.

Ошибка распространяется только на От 5% до 10% процентов пользователей, удалите & переустановить это обходное решение, но не решение.


В ответ на Hans Passant:

| действительно странный характер, я не имею ни малейшего понятия, откуда оно взялось, и в чем оно заключается в этом контексте. Однако URL-адрес развертывания (включая символ |) всегда один и тот же, и он работает в 90% случаев. Я не думаю, что | символ является причиной проблемы. Тем не менее, я постараюсь выяснить, почему персонаж есть и потом вернуться к вам.

Удалить или переустановить проблему на стороне клиента (тот же установщик!). Поэтому мы можем исключить поврежденную установку .Net/VS.

Может возникнуть проблема с вредоносным ПО (McAfee). Я буду исследовать, как только мне удастся воспроизвести ошибку на одной из моих тестовых машин.

Путь к файлу - 123 символа; имя файла имеет 21 символ. Путь к файлу + имя файла = 144 символов

ответ

2
...\APPLICATIONNAME\APPLICATIONNAME Suite.appref-ms| 

В .NET Framework обычно орет как резаный, когда он получает имя файла, как это. Метод System.IO.Path.CheckInvalidPathChars() вызовет исключение «Незаконные символы в пути», символ | недопустим в имени файла или каталога. Но эта проверка не выполняется в сантехнике ClickOnce, она не использует обычный код обработки файлов, такой как классы FileStream и Path.

Это плохое имя файла поступает прямо в операционную систему. То, что происходит дальше, довольно неочевидно, но файловая система, переворачивающая птицу на нем, как будто, конечно, не является неожиданностью.

У меня нет разумной догадки, как это получилось, это просто никогда не пойдет не так. Дикая догадка заключается в том, что у вас есть одна машина вокруг которой есть поврежденный файл в .NET Framework или VS install, учитывая частоту этой проблемы. Может быть на рабочем столе конкретного разработчика. Если тот же установщик создает хорошую установку при повторном запуске, проблема возникает на стороне клиента. Anti-malware всегда подозревается. Имя длинное, вы можете быть немного выше MAX_PATH (259 символов) и отключать ошибку переполнения буфера.

Просто дикие догадки. Но в этом проблема. Удачи, охотясь за ней.

+0

The | действительно странный персонаж, я понятия не имею, откуда он. – Joel

+0

Вы обфускали имя, удалив важную подсказку. Подсчитайте количество символов в реальном имени и сообщите нам, сколько. –

+0

144 символа с пробелами, вдали от ограничения MAX_PATH. – Joel

0

Это часто случается с моим щелчком раза развертывания, когда приложение обновляет или установки

Что я сделал, это запустить следующие

rundll32 %windir%\system32\dfshim.dll CleanOnlineAppCache 

очистить кэш МОФА и запустить URL снова установить

вы можете предоставить пользователю файл bat с командой и попросить их запустить его, когда они столкнулись с проблемой установки/обновления

+0

Это просто еще один способ обойти проблему, что-то вроде аварийного восстановления. Но я хотел бы предотвратить «катастрофу» заранее. В любом случае, наше приложение настроено на запуск 'offline', поэтому очистка OnlineAppCache не будет иметь никакого эффекта. Это также влияет на другие установки clickonce ... – Joel

+1

Я вижу, я всегда, хотя это ошибка Microsoft при развертывании clickOnce для WPF xbap. Будет здорово, если мы узнаем причину. –

+0

'mage.exe -cc', чтобы очистить кеш. Достаточно скопировать файл mage.exe на компьютер клиента. –