【问题标题】:ClickOnce de-signs our executable and says "Unknown Publisher"ClickOnce 设计了我们的可执行文件并显示“未知发布者”
【发布时间】:2012-05-10 15:43:53
【问题描述】:

我们正在开发一个通过 ClickOnce 部署的应用程序。我们有一个 VeriSign 代码签名证书,用于签署我们的应用程序(通过signtool.exe post-build)和我们的 ClickOnce 清单。我们目前有两个与签名相关的问题:

  1. 我们正在使用我们的证书签署我们的 .exe。构建我们的应用程序后,我们可以看到它已签名(例如,通过“signtool verify /pa TheExecutable.exe”)。但是通过 ClickOnce 安装应用程序后,.exe 不再签名。

  2. 我们正在使用我们的证书对 ClickOnce 清单进行签名。但是当我们尝试通过 ClickOnce 安装应用程序时,ClickOnce 安装程序会显示“Unknown Publisher”。

问题 #1 一直存在。问题 #2 有时会莫名其妙地消失,但它总是在此后不久又回来,而且我们已经持续看到它几个星期了。

有什么想法吗?

【问题讨论】:

  • 作为备用计划,您可以尝试使用 VS 中的 exe 项目“签名”属性选项卡并从命令行使用 msbuild.exe 来设置代码签名。不理想,我知道。
  • @anthony:签名属性选项卡用于强命名(即 .NET 签名),而不是 Win32 签名(Authenticode)。 Windows 只关心 Authenticode :(

标签: .net deployment clickonce


【解决方案1】:

我会跟你说实话,保罗。我从来没有对 ClickOnce 感到非常兴奋。除了手动发布/部署方面,该工具集似乎从未真正成熟过。通过 MSBuild 运行这些东西从来都不是一个好的体验,Mage.exe 似乎总是对我有问题。大多数时候,我的问题都围绕着版本号设置不正确。

也就是说,我认为我们最大的麻烦来自尝试通过 Visual Studio 中的设置 UI 来管理事物。尝试减少对 MSBuild“魔法”的依赖并将必要的参数传递到 MSBuild 并在 csproj 文件中进行更多控制,这对我很有帮助。

我不知道您的构建设置是什么样的,但对于我们来说,我们有 Jenkins 运行一个在解决方案上调用 MSBuild 的 Rake 文件。这允许我们将特定参数从 Rake 文件发送到 MSBuild。

具体来说,我们推送ApplicationVersionApplicationRevisionMinimumRequiredVersionOutDir 的值。至于 csproj 本身需要注意的事项,您要确保设置了 ManifestCertificateThumbprintManifestKeyFileGenerateManifestsSignManifests。我们还将默认构建目标设置为 Publish,但我不确定这是否与此相关。

我无法解释为什么 ClickOnce 会“设计”您的可执行文件,除了您正在签名的可执行文件可能不是您认为打包在 ClickOnce 包中的那个。换句话说,它可能正在构建一个新的可执行文件并将其放入包中,而不是您已经签名的那个。不过,我想我必须更多地了解您的设置,才能确定进行该调用。

对于它的价值,如果我可以再做一次,我不会把我的鸡蛋放在 ClickOnce 篮子里。对于运行 Internet Explorer 或已安装 Chrome 插件的用户来说,这确实是一次很棒的体验。这是更多的工作,但我目前正在研究一个模仿 Chrome 更新故事的解决方案。他们为 Internet Explorer 用户提供了 ClickOnce 包,但它实际上仅用于下载安装 Chrome.exe 和 Update.exe 的 Windows 安装程序包。他们在the technical documentation 中为 Omaha(也称为 Google 更新)提供了大量详细信息。

【讨论】:

  • 这可能是一个红鲱鱼,但我刚刚意识到,当 ClickOnce 安装我们的应用程序并在机器上安装了 .Net 4.5 时,它说发布者是未知的。在没有 4.5 的机器上,发布者是正确的。这可能是 4.5 ClickOnce 安装程序中的一个错误。
【解决方案2】:

好的,解决了这个问题 1/2 的谜题:ClickOnce 从 bin 获取应用程序清单,但从 obj 获取实际的 EXE。然后,为了分发您签名的 exe,您必须对 obj 目录中的文件进行签名

编辑:这是另一半。安装 .NET 4.5 Beta 会中断 ClickOnce 签名/验证,即使在 VS2010 中也是如此。

【讨论】:

  • 你太棒了。我击中的另一件事是一旦签名,clickonce 清单失败并显示“,计算的哈希值与清单中指定的不同”,根据这个人的博客文章:blogs.msdn.com/b/gauravb/archive/2008/10/06/… 需要编辑 Microsoft.Common.targets 并插入行“ _CopyManifestFiles;"在“PublishOnlyDependsOn”部分。
  • 为什么 .NET 4.5 必须打破常规。 :(
  • 我实际上认为这是在 RTM 中修复的。
【解决方案3】:

自行签署 setup.exe 时出现问题。我在为 MSFT 的 P&P 人员编写 ClickOnce 文章时遇到了这个问题。没有解决方法。

您的证书是否安装在您用于生成部署的用户帐户的证书存储中?它是否在 VS 解决方案本身中指定为文件?如果它是默认设置,并且您使用 msbuild 和 mage 生成部署,那么它出来签名好吗?

【讨论】:

    【解决方案4】:

    这是我处理签署清单和签署 exe 的方式。我将此添加到我的 .csproj 文件的底部(在文本编辑器中编辑它)。

      <Target Name="AfterBuild">
        <CallTarget Targets="SignOutput" />
        </Target>
        <Target Name="SignOutput">
        <PropertyGroup>
          <TsUrl>http://timestamp.comodoca.com/rfc3161</TsUrl>
        </PropertyGroup>
        <ItemGroup>
          <SignableFiles Include="$(ProjectDir)obj\$(ConfigurationName)\myappname.exe" />
        </ItemGroup>
        <Exec Command="signtool.exe sign /n &quot;My Company Name LLC&quot; /tr $(TsUrl) &quot;%(SignableFiles.Identity)&quot;" />
      </Target>
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-11-16
      • 1970-01-01
      • 1970-01-01
      • 2011-11-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多