安装ClickOnce应用程序时出错

问题描述:

今天我每次用户尝试安装应用程序时都开始出现错误,我不知道为什么即使在部署数月零后出现问题,我也没有更改任何与项目属性相关的内容,所有修改已与代码相关。安装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 –

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。如果没有,请删除它并重新添加正确的类型。