2017-07-26 246 views
2

今天我每次用戶嘗試安裝應用程序時都開始出現錯誤,我不知道爲什麼即使在部署數月零後出現問題,我也沒有更改任何與項目屬性相關的內容,所有修改已與代碼相關。安裝ClickOnce應用程序時出錯

以下是錯誤日誌

平臺版本信息 的Windows:10.0.15063.0(Win32NT) 公共語言運行庫:4.0.30319.42000 System.Deployment.dll:4.7.2046.0通過內置: NET47REL1 clr.dll:4.7.2101.1通過內置:NET47REL1LAST dfdll.dll:4.7.2046.0通過內置:NET47REL1 dfshim.dll:10.0.15063.0(WinBuild.160101.0800)

SOURCES 部署URL:file:/// Y:/RE/RentaEquipos.application 部署提供程序url:file://svrre/Repository/RE/RentaEquipos.application 應用程序URL:file:// svrre/Repository/RE /Application%20Files/RentaEquipos_2017_07_10_8/RentaEquipos.exe.manifest

恆等式 部署身份:RentaEquipos.application,版本= 2017.7.10.8文化= ES-CR公鑰= 0000000000000000,ProcessorArchitecture用於= 86

APPLICATION SUMMARY *可安裝的應用程序。

錯誤摘要 下面是錯誤摘要,這些錯誤的詳細信息將在日誌後面列出。 *激活Y:\ RE \ RentaEquipos.application導致異常。檢測到以下失敗消息: +指定的轉換無效。

COMPONENT STORE TRANSACTION FAILURE SUMMARY 未檢測到事務錯誤。

警告 *此應用程序的清單沒有簽名。簽名驗證將被忽略。 *此應用程序的清單沒有簽名。簽名驗證將被忽略。 *此應用程序的清單沒有簽名。簽名驗證將被忽略。

操作進度狀態 * [26/7/2017 11:23:16]:激活Y:\ RE \ RentaEquipos.application已開始。 * [26/7/2017 11:23:16]:處理部署清單已成功完成。 * [26/7/2017 11:23:16]:應用程序的安裝已經開始。

錯誤詳細信息 在此操作過程中檢測到以下錯誤。 * [26/7/2017 11:23:16] System.InvalidCastException - 指定的轉換無效。 - 源:System.Deployment - 堆棧跟蹤: at System.Deployment.Application.DownloadManager.VerifyRequestedPrivilegesSupport(String requestedExecutionLevel) at System.Deployment.Application.DownloadManager。DownloadApplicationManifest(AssemblyManifest deploymentManifest,字符串TARGETDIR,烏里deploymentUri,> IDownloadNotification通知,DownloadOptions選項,烏里& appSourceUri,字符串& appManifestPath) 在System.Deployment.Application.ApplicationActivator.DownloadApplication(SubscriptionState子狀態中,ActivationDescription actDesc,Int64類型的transactionId,> TempDirectory & downloadTemp) 在System.Deployment.Application.ApplicationActivator.InstallApplication(SubscriptionState &子狀態中,ActivationDescription actDesc) 在System.Deployment.Application.ApplicationActivator.PerformDeploymentActivation(URI activationUri,布爾isShortcut,字符串textualSubId,字符串> deploymentProviderUrlFromExtension,BrowserSettings browserSettings,字符串& errorPageUrl,烏里& deploymentUri) 在System.Deployment.Application.ApplicationActivator.PerformDeploymentActivationWithRetry(URI activationUri,布爾isShortcut,字符串textualSubId,字符串> deploymentProviderUrlFromExtension,BrowserSettings browserSettings,字符串& errorPageUrl) ---從先前位置棧跟蹤的結尾其中引發異常--- 在System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw() 在System.Deployment.Application.ApplicationActivator.PerformDeploymentActivationWithRetry(URI activationUri,布爾isShortcut,字符串textualSubId,字符串> deploymentProviderUrlFromExtension,browserSettings browserSettings,字符串&在System.Deployment.Application處,errorPageUrl) 。 ApplicationActivator.ActivateDeploymentWorker(對象狀態)

組件存儲交易詳情 沒有交易信息可用。

+0

因爲它是'System.Deployment.Application.DownloadManager.VerifyRequestedPrivilegesSupport(String requestedExecutionLevel)'''拋出'InvalidCastException',我會說這是一個很好的猜測,說'requestedExecutionLevel'用於下載無效。也許你的配置有問題嗎? –

+0

測試第二個應用即時通訊安裝與clickonce,它給了我同樣的錯誤,這第二個應用程序已更新幾個月前,也它olny給我在Windows 10中的錯誤,測試其他計算機與Windows 7和兩個應用程序安裝沒有問題,但第二個問題,如果我部署應用程序的更新安裝程序在任何操作系統中遇到問題,不知道可能會發生什麼 –

+0

不幸的是,該''DownloadManager'類的代碼不可用[參考來源](http://referencesource.microsoft.com/),所以很難弄清楚它到底在做什麼。我猜如果你真的很絕望,你可以嘗試反編譯System.Deployment.dll –

回答

2

DownloadManager.VerifyRequestedPrivilegesSupport方法拋出一個InvalidCastException。不幸的是,該類的代碼在ReferenceSource上不可用,但當System.Deployment.dlldecompiled時,罪魁禍首是明確的。經反編譯的方法是這樣的:

private static void VerifyRequestedPrivilegesSupport(string requestedExecutionLevel) 
{ 
    Logger.AddMethodCall("VerifyRequestedPrivilegesSupport(" + requestedExecutionLevel + ") called."); 
    if (!PlatformSpecific.OnVistaOrAbove) 
    return; 
    bool flag = false; 
    RegistryKey registryKey = Registry.LocalMachine.OpenSubKey("Software\\Microsoft\\Windows\\CurrentVersion\\Policies\\System"); 
    if (registryKey != null && registryKey.GetValue("EnableLUA") != null) 
    { 
    Logger.AddInternalState("LUA policy key = " + registryKey.Name); 
    if ((int) registryKey.GetValue("EnableLUA") != 0) 
    { 
     flag = true; 
     Logger.AddInternalState("LUA is enabled."); 
    } 
    } 
    if (flag && (string.Compare(requestedExecutionLevel, "requireAdministrator", StringComparison.OrdinalIgnoreCase) == 0 || string.Compare(requestedExecutionLevel, "highestAvailable", StringComparison.OrdinalIgnoreCase) == 0)) 
    throw new InvalidDeploymentException(ExceptionTypes.UnsupportedElevetaionRequest, string.Format((IFormatProvider) CultureInfo.CurrentUICulture, Resources.GetString("Ex_ManifestExecutionLevelNotSupported"), new object[0])); 
} 

拋出異常會是這樣一個行:

if ((int) registryKey.GetValue("EnableLUA") != 0) 

的代碼讀取Windows註冊表中的註冊表項\HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersio‌​n\Policies\System。爲了拋出該異常,該鍵必須存在,並且必須具有EnableLUA值,但該值必須鍵入爲非整數的值。您需要在發生錯誤的計算機上運行RegEdit.exe,導航到註冊表中的該密鑰,然後檢查該值以查看它是什麼。它應該在該值的Type列中顯示REG_DWORD。如果沒有,請刪除它並重新添加正確的類型。

相關問題