如果从除我的系统之外的任何系统发布,则具有代码签名证书的Clickonce应用程序会被组策略阻止

本文关键字:系统 Clickonce 应用程序 证书 策略 代码 我的 任何 如果 | 更新日期: 2023-09-27 18:03:01

环境:

  • ClickOnce使用签名证书(Symantec Class 3 SHA256代码签名CA(创建应用程序
  • 客户端计算机正在运行windows 7,并且用户处于禁止本地管理员访问的组策略下
  • 对于我们的代码证书,有一个"证书策略"应用于该组,它应该允许任何具有该证书的应用程序使用本地管理员权限运行
  • 由于安全原因,无法更改组策略
  • 多达6名开发人员参与并发布此项目
  • Visual Studio 2013

症状:

当我从我的系统发布应用程序时,它能够自动更新并按预期运行。

当任何其他开发人员发布时,它会自动更新,应用程序无法启动。转储包含以下错误:

This program is blocked by group policy. For more information, contact your system administrator

如果我从我的机器上重新发布,它将按预期更新和运行。


签字:

以下步骤是我们如何将证书应用于应用程序:

  • 项目属性
  • 签名选项卡
  • "从文件中选择"按钮
  • 选择项目中包含的证书
  • 输入证书密码

问题:

当证书以相同的方式应用时,为什么我们只能从一个开发人员的计算机更新ClickOnce应用程序,而不能从其他计算机更新?

除了禁用组策略之外,我们如何在不遇到相同问题的情况下从多台计算机成功发布此应用程序?

如果从除我的系统之外的任何系统发布,则具有代码签名证书的Clickonce应用程序会被组策略阻止

我不知道它不起作用的确切原因,但我想说,如果clickonce可以部署在第三方机器上,并且在同一台机器上,它使用从您的机器生成的clickonce,而不使用从另一台开发人员机器生成的clickonce,那么您已经完成了最困难的部分。

您需要追踪两台开发人员机器之间的差异。好的候选者是注册表或证书存储。

所以对我来说,你有这些选择:

  • 使用其他机器进行测试(生成和部署(,看看它是否正常工作
  • 检查clickonce的.csproj设置是否完全相同
  • 请尝试在本地存储中安装证书,然后使用"从存储中选择">
  • 检查证书链是否正确(根证书已安装,证书已安装在正确的组中,..(
  • 比较两台开发机器上的注册表(如果它们非常不同,可能会很困难(
  • 将生成的clickonce文件与文件比较器进行比较,尤其是.manifest文件(我已经通过这种方式追踪到了错误(

为了借鉴Fabian的答案,微软最近使SHA256证书向后兼容,因此它们将在旧版本的windows上运行。由于您要发布到Windows 7计算机,因此可以检查服务器上生成的应用程序文件发布后引用:-算法="http://www.w3.org/2000/09/xmldsig#sha1">

如果上面写着sha256,安装时Windows 7可能无法识别它。

如果是这种情况,请尝试更新您的Visual Studio版本-这应该包含在最新的更新中。