发布时在 clickonce 应用程序中签署可执行文件

Sign executable within a clickonce application when publishing

我在 Visual Studio 2013 年有一个 c# .net 项目。我已成功签署清单,告诉 Visual studio 还要签署程序集。

但是应用程序 exe 文件没有被签名。谷歌搜索后,我将以下内容添加到 post 构建事件

"C:\Program Files\Microsoft SDKs\Windows\v7.1A\Bin\signtool.exe" sign /f "$(ProjectDir)certificate.pfx" /p mypassword "$(ProjectDir)obj\Debug\myapp.exe"

也尝试过

"C:\Program Files\Microsoft SDKs\Windows\v7.1A\Bin\signtool.exe" sign /f "$(ProjectDir)certificate.pfx" /p mypassword "$(ProjectDir)bin\Debug\myapp.exe"

这似乎对 exe 进行了签名,但是现在我的应用程序无法启动并给出错误:

File, ECG Cloud Holter Assistant.exe, has a different computed hash than specified in manifest.

所以我想我需要它在 生成清单之前签署 exe 但我该怎么做呢?

如果我不包含 post 构建命令,应用程序运行正常,但会出现未知发布者警告。

试一试:
1.右击winforms项目select"Unload Project".
2.再次右击项目select"Edit (yourprojectname).csproj".
3. 转到文件底部并在结束 "Project" 标记之前添加以下部分:

<Target Name="AfterCompile">
   <Exec Command="C:\Program Files\Microsoft SDKs\Windows\v7.1A\Bin\signtool.exe" sign /f "$(ProjectDir)certificate.pfx" /p mypassword "$(ProjectDir)obj\Debug\myapp.exe" />
</Target>

4。保存项目文件并关闭它。
5.再次右击项目,重新加载

现在,如果您构建项目,您将不会在输出 window 中看到有关签署应用程序可执行文件的任何信息。它只会在您发布时执行,并且不会有日志记录让您知道它已签名。你怎么知道它是否有效?转到您发布到的文件夹,然后查看“应用程序文件”文件夹。在新版本的文件夹中找到应用程序可执行文件。右键单击它,选择属性。寻找名为“数字签名”的选项卡。如果未找到,则未签名。如果确实看到了,请转到该选项卡;它将显示签名列表和证书的签名者。您可以双击签名者,然后查看签名证书。

我有一个类似的问题,并且能够在这个博客 post 的帮助下解决:https://robindotnet.wordpress.com/2013/02/24/windows-8-and-clickonce-the-definitive-answer-2/