17

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

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

  2. 我们正在使用我们的证书签署 ClickOnce 清单。但是当我们尝试通过 ClickOnce 安装应用程序时,ClickOnce 安装程序会显示“未知发布者”。

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

有任何想法吗?

4

4 回答 4

14

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

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

于 2012-05-02T21:47:06.847 回答
7

这是我处理签署清单和签署 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>
于 2012-11-13T23:21:48.223 回答
4

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

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

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

具体来说,我们推入ApplicationVersionApplicationRevisionMinimumRequiredVersion和 的值OutDir。至于 csproj 本身需要注意的事项,您要确保已设置ManifestCertificateThumbprint、和。我们还将默认构建目标设置为,但我不确定这是否相关。ManifestKeyFileGenerateManifestsSignManifestsPublish

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

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

于 2012-05-01T02:02:31.607 回答
-1

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

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

于 2012-05-05T18:10:56.420 回答