将Authenticode与ClickOnce WPF应用程序一起使用

时间:2013-01-10 05:27:58

标签: wpf clickonce authenticode

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

  1. 我有Comodo的“真实”Authenticode证书,我付了钱。
  2. 我正在尝试签名和部署用Visual Studio 2012和.NET 4.5编写的WPF应用程序。
  3. 在项目的属性中,我选中了“签署ClickOnce清单”并选择了我的证书。
  4. 我也在使用Comodo的时间戳服务器(http://timestamp.comodoca.com/authenticode
  5. 在“发布”标签和“先决条件”按钮下,我选中了“创建安装程序以安装必备组件”。
  6. 当我构建和发布时,一切正常! setup.exe是用我的Comodo证书签名的,所以这很好。此外,.application文件使用Comodo证书签名,我的公司名称显示为发布者 - 这也很好。

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

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

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

1 个答案:

答案 0 :(得分:10)

嗯,没有人跳过这个,但谢天谢地,我明白了!

感谢您提出这个问题:"File has a different computed hash than specified in manifest" error when signing the 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,在我的情况下),但之后它就像一个魅力!

我希望将来可以帮助别人。