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

Nat*_*San 4 c++ code-signing visual-studio

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

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

我还使用 signtool 查看了 Visual Studio 命令行。但是,我需要花费大量时间来了解它的工作原理并实施它。

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

Who*_*aig 5

这就是我使用 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"
Run Code Online (Sandbox Code Playgroud)

这将使用您的证书签署项目输出(可能是一个DLL或EXE没有区别),并记录在一个后缀为您的项目命名的文件中的签名证书的输出sign.out,把该文件的文件夹中叫sign了你输出目录。

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

在此处输入图片说明

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

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

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

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