如何签署Visual Studio .msi的安装文件

我最近从globalsign购买了authenticode证书,但在部署文件时遇到问题。 有一些.exe文件由项目生成,然后放入.msi。 当我使用signtool签署.exe文件时,证书有效且运行正常。 问题是当我构建.msi(使用visual studio安装项目)时,.exe文件会丢失签名。 所以我可以在构建之后签署.msi,但是已安装的.exe文件继续整个“未知的发布者”业务。 如何在这些文件上保留签名以便在客户端计算机上安装?

Visual Studio在编译时创建两个文件夹:obj和bin。 事实certificate,至少在我的情况下,输出将始终从obj文件夹复制到bin文件夹中。 我在bin文件夹中签署可执行文件只是为了让它们被覆盖,然后打包到msi中。 在obj文件夹中签署可执行文件解决了这个问题。

您可以将以下PostBuildEvent添加到VS安装项目(项目属性):

Windows 8.0:

"C:\Program Files (x86)\Windows Kits\8.0\bin\x86\signtool.exe" sign /a $(BuiltOuputPath) 

Windows 10:

 "C:\Program Files (x86)\Windows Kits\10\bin\x86\signtool.exe" sign /a $(BuiltOuputPath) 

项目属性窗口

有关signtool的用法,请参阅此MSDN文档 。 您可以使用/ f标志指定签名证书,使用/ p指定证书的密码等

另请注意,$(BuildOuputPath)拼写错误。 这是故意的。 谢谢微软…

您是否肯定安装程序项目正在查看已签名的二进制文件而不是未签名的二进制文件?

我没有太多使用msi构建器,但我会发现它修改它所包装的文件是令人惊讶的。