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

时间:2009-10-30 21:00:39

标签: c# visual-studio-2008 authenticode code-signing-certificate

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

4 个答案:

答案 0 :(得分:14)

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

答案 1 :(得分:12)

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

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)

Project properties window

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

另请注意,$(BuildOuputPath)拼写错误。 This is on purpose.谢谢微软......

答案 2 :(得分:2)

其他选择(我正在执行的选择)是先创建.msi,然后使用pfx(证书)对其进行签名。

(我使用的是在globalsign.com上购买的代码签名证书)

打开CMD: 运行-> powershell

运行证书所在的位置并保存指纹:

PS C:\ Windows \ system32> Get-PfxCertificate -FilePath。\ CompanyCertificate.pfx

将得到类似这样的 ABCFEDRABF229B78BF9C40EC47007C1234567890 ,您必须在以下执行行中替换您的值。

然后找到 singtool.exe 所在的位置并去那里(在我的情况下为Win 10,msi也必须位于同一路径中)并执行以下操作:

PS C:\Program Files (x86)\Windows Kits\10\App Certification Kit> .\signtool.exe sign /f CompanyCertificate.pfx /d "App Description" /p pfxPasswordHere /v /sha1 ABCFEDRABF229B78BF9C40EC47007C1234567890 /t "http://timestamp.comodoca.com/authenticode" MyApplicationSetup.msi

成功签名的文件数:1

警告数量:0

错误数量:0

恭喜,你明白了!

您将在.msi属性下看到此新标签页:

enter image description here

最后尝试安装它:

Success!!

答案 3 :(得分:0)

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

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