安装ClickOnce应用程序

时间:2017-07-26 17:38:32

标签: .net vb.net visual-studio deployment clickonce

今天我开始每次用户尝试安装应用程序时都会收到错误,我不知道为什么我在部署0个月的问题后得到这个,我没有改变任何与项目属性相关的内容,所有修改都与代码相关

这是错误日志

  

平台版本信息     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     部署网址:file:/// Y:/RE/RentaEquipos.application     部署提供程序URL:file://svrre/Repository/RE/RentaEquipos.application     应用程序网址:file://svrre/Repository/RE/Application%20Files/RentaEquipos_2017_07_10_8/RentaEquipos.exe.manifest

     

恒等式     部署标识:RentaEquipos.application,Version = 2017.7.10.8,Culture = es-CR,PublicKeyToken = 0000000000000000,processorArchitecture = x86

     

申请摘要     *可安装的应用程序。

     

错误摘要     下面是错误的摘要,这些错误的详细信息将在后面的日志中列出。     *激活Y:\ RE \ RentaEquipos.application导致异常。检测到以下失败消息:         +指定的演员表无效。

     

组件商店交易失败摘要     未检测到任何交易错误。

     

警告     *此应用程序的清单没有签名。签名验证将被忽略。     *此应用程序的清单没有签名。签名验证将被忽略。     *此应用程序的清单没有签名。签名验证将被忽略。

     

操作进度状态     * [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         - 堆栈跟踪:             在System.Deployment.Application.DownloadManager.VerifyRequestedPrivilegesSupport(String requestedExecutionLevel)             在System.Deployment.Application.DownloadManager.DownloadApplicationManifest(AssemblyManifest deploymentManifest,String targetDir,Uri deploymentUri,> IDownloadNotification notification,DownloadOptions options,Uri& appSourceUri,String& appManifestPath)             在System.Deployment.Application.ApplicationActivator.DownloadApplication(SubscriptionState subState,ActivationDescription actDesc,Int64 transactionId,> TempDirectory& downloadTemp)             在System.Deployment.Application.ApplicationActivator.InstallApplication(SubscriptionState& subState,ActivationDescription actDesc)             在System.Deployment.Application.ApplicationActivator.PerformDeploymentActivation(Uri activationUri,Boolean isShortcut,String textualSubId,String> deploymentProviderUrlFromExtension,BrowserSettings browserSettings,String& errorPageUrl,Uri& deploymentUri)             在System.Deployment.Application.ApplicationActivator.PerformDeploymentActivationWithRetry(Uri activationUri,Boolean isShortcut,String textualSubId,String> deploymentProviderUrlFromExtension,BrowserSettings browserSettings,String& errorPageUrl)   ---从抛出异常的先前位置开始的堆栈跟踪结束---             在System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()             在System.Deployment.Application.ApplicationActivator.PerformDeploymentActivationWithRetry(Uri activationUri,Boolean isShortcut,String textualSubId,String> deploymentProviderUrlFromExtension,BrowserSettings browserSettings,String& errorPageUrl)             在System.Deployment.Application.ApplicationActivator.ActivateDeploymentWorker(对象状态)

     

组件商店交易细节     没有可用的交易信息。

1 个答案:

答案 0 :(得分:5)

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,导航到注册表中的该键,然后检查该值以查看它是什么。它应该在REG_DWORD列中显示该值的Type。如果没有,请将其删除并使用正确的类型重新添加。