8

好吧,我做的不对,我需要一些帮助。这是正在发生的事情:

  1. 我有一张来自Comodo的“真正的”Authenticode 证书,我已经支付了费用。
  2. 我正在尝试签署和部署用 Visual Studio 2012 和 .NET 4.5 编写的 WPF 应用程序。
  3. 在项目的属性中,我检查了“签署 ClickOnce 清单”并选择了我的证书。
  4. 我也在使用 Comodo 的时间戳服务器(http://timestamp.comodoca.com/authenticode
  5. 在“发布”选项卡和“先决条件”按钮下,我已选中“创建安装程序以安装必备组件”。

当我构建和发布时,一切正常!setup.exe 使用我的 Comodo 证书签名,这很好。此外,该.application文件使用 Comodo 证书签名,并且我的公司名称显示为发布者——这也很好。

问题来了:一旦将应用程序下载到客户端,Windows 8 就会发出关于不受信任程序 (MyProgram.exe) 的警告,并且发布者不是我的公司名称。因此,除了实际的可执行文件外,所有内容都已签名。

我尝试在 obj\Release\MyProgram.exe 上添加使用 signtool.exe 的构建后脚本,但是当我尝试安装应用程序时,我收到一个清单错误,指出哈希值不匹配。换句话说,清单是在构建后事件之前生成的。

如何签署我的 .exe 并维护 ClickOnce 清单的完整性?有没有一种简单的方法可以做到这一点,或者我必须手动在每个文件上使用 mage.exe(我希望不是)?

4

1 回答 1

10

好吧,没有人对此有所了解,但谢天谢地,我想通了!

感谢这个问题:签署EXE时出现“文件的计算哈希值与清单中指定的不同”错误

我能够编辑项目文件的 XML(卸载项目,然后选择“编辑 myproject.csproj”)并添加:

  <Target Name="SignOutput" AfterTargets="CoreCompile">
<PropertyGroup>
  <TimestampServerUrl>http://timestamp.comodoca.com/authenticode</TimestampServerUrl>
  <ApplicationDescription>My Project Friendly Name</ApplicationDescription>
  <SigningCertificateCriteria>/n MyCertName</SigningCertificateCriteria>
</PropertyGroup>
<ItemGroup>
  <SignableFiles Include="$(ProjectDir)obj\$(ConfigurationName)\$(TargetName)$(TargetExt)" />
</ItemGroup>
<GetFrameworkSdkPath>
  <Output TaskParameter="Path" PropertyName="SdkPath" />
</GetFrameworkSdkPath>
<Exec Command="&quot;$(SdkPath)bin\signtool&quot; sign $(SigningCertificateCriteria) /d &quot;$(ApplicationDescription)&quot; /t &quot;$(TimestampServerUrl)&quot; &quot;%(SignableFiles.Identity)&quot;" />

我不得不将 signtool.exe 文件移动到 SDK 文件夹(在我的情况下为 C:\Program Files (x86)\Microsoft SDKs\Windows\v8.0A\bin),但之后它就像一个魅力!

我希望这对将来的其他人有所帮助。

于 2013-01-11T00:24:03.193 回答