【问题标题】:How to sign installation files of a Visual Studio .msi如何签署 Visual Studio .msi 的安装文件
【发布时间】:2010-12-11 18:12:23
【问题描述】:

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

【问题讨论】:

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


    【解决方案1】:

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

    【讨论】:

    • 非常感谢。我见过有人试图在其他地方传达相同的信息,尽管您的答案非常简洁易读。你救了我几个小时:)
    【解决方案2】:

    您可以将以下 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)
    

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

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

    【讨论】:

    • 在我的例子中,signtool.exe 存在于“C:\Program Files (x86)\Microsoft SDKs\ClickOnce\SignTool\signtool.exe”中
    【解决方案3】:

    其他选项(我正在做的那个)是先创建 .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 属性下看到这个新选项卡:

    最后尝试安装它:

    【讨论】:

    • 对于缺少 signtool.exe 的任何人,它是 Windows 10 SDK 的一部分。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-01-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多