我最近从 globalsign 购买了一个验证码证书,但在签署我的文件以进行部署时遇到问题。有几个 .exe 文件由项目生成,然后放入 .msi。当我使用 signtool 签署 .exe 文件时,证书有效并且运行良好。问题是,当我构建 .msi(使用 Visual Studio 安装项目)时,.exe 文件会丢失它们的签名。因此,我可以在构建 .msi 后对其进行签名,但安装的 .exe 文件会继续整个“未知发布者”业务。如何保留这些文件上的签名以便在客户端计算机上安装?
3 回答
Visual Studio 在编译时创建两个文件夹:obj 和 bin。事实证明,至少在我的情况下,输出将始终从 obj 文件夹复制到 bin 文件夹中。我在 bin 文件夹中签署可执行文件只是为了将它们覆盖然后打包到 msi 中。签署 obj 文件夹中的可执行文件解决了这个问题。
您可以将以下 PostBuildEvent 添加到您的 VS Setup 项目(项目属性):
视窗 8.0:
"C:\Program Files (x86)\Windows Kits\8.0\bin\x86\signtool.exe" sign /a $(BuiltOuputPath)
视窗 10:
"C:\Program Files (x86)\Windows Kits\10\bin\x86\signtool.exe" sign /a $(BuiltOuputPath)
有关 signtool 的用法,请参阅此 MSDN 文档。您可以使用 /f 标志指定签名证书,/p 指定证书的密码等
另外,请注意 $(BuildOutputPath) 拼写错误。这是故意的。谢谢微软...
其他选项(我正在做的那个)是首先创建 .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 属性下看到这个新选项卡:
最后尝试安装它: