如何让 Visual Studio 2017 自动签署 Win32 应用程序?

How can I get Visual Studio 2017 to sign a Win32 application automatically?

我正在使用 visual studio 2017。我不是开发人员。我只是想写一个简单的解析脚本,我熟悉 visual studio。我使用 Atmel Studio(基于 VS)编写嵌入式代码,但我不必处理签名。我在我的工作计算机上安装了 visual studio,现在我每次构建新版本时都会遇到 bit9 错误。

内部 IT 向我指出了一堆稍微过时的证书内容。我现在有一个证书可以应用于我的构建,但是定义 here 的过程显然不适用于 Win32 应用程序。我在项目属性中没有签名选项卡。

我还使用 signtool 研究了 visual studio 命令行。但是,我需要花费大量时间来了解它的工作原理和实施方式。

希望其他人已经解决了这个问题,我可以节省时间。如果没有简单的解决方案,我将返回手动解析,因为这已经占用了我很多时间。

这就是我使用 Visual Studio 2010 和 Visual Studio 2015 为非托管 C 或 C++ Win32 应用程序完成此操作的方式。您需要:

  • 签名证书。在 Windows 中工作时,这通常作为 PFX 给出,并且通常是证书链中的中间证书。
  • 以上PFX解密证书私钥的密码。

有了这些,可以为您的 Win32 项目创建以下自定义构建步骤:

"$(FrameworkSDKDir)bin\x86\signtool.exe" sign /v /f "path-to-your-cert\yourcert.pfx" /p password "$(TargetPath)" > "$(OutDir)sign$(ProjectName)-sign.out"

这将使用您的证书对项目输出进行签名(无论是 DLL 还是 EXE 都没有区别),并将签名证书的输出记录在以您的项目命名且后缀为 sign.out 的文件中,将该文件放在输出目录外名为 sign 的文件夹中。

这似乎有点矫枉过正,但生成输出文件是有原因的。通过创建该文件,并将其命名为自定义构建步骤的 "Outputs" 之一:

比较可以用来判断是否重签。每次构建项目时,如果重新生成目标图像(您的 exe 或 dll),则输出文件将过时并且自定义构建步骤将被启动以重新生成它(因此也重新签署图像).顺便说一句,sign.out 文件将包含如下内容:

The following certificate was selected:
    Issued to: The Signing Cert Name Here

    Issued by: The Issuer Cert Name Here

    Expires:   Sat Dec 31 16:59:59 2039

    SHA1 hash: 232C80E19EBC71330E7C12CA8C07B345B1531777


Done Adding Additional Store
Successfully signed: full-path-to-image-here

Number of files successfully Signed: 1

Number of warnings: 0

Number of errors: 0

获得 PFX 和密码后,您可以轻松地手动测试命令,然后再最终将其配置为构建的一部分。我见过的唯一真正的通配符是 signtool.exe 的完整路径,它似乎不时发生变化(例如,VS2008 与 VS2015 不同。

无论如何,我就是这样做的。希望你也可以。