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

时间:2017-07-05 20:10:45

标签: c++ visual-studio code-signing

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

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

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

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

1 个答案:

答案 0 :(得分:1)

这就是我使用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的文件夹中。

这可能看起来有点矫枉过正,但有一个原因就是生成了输出文件。通过创建该文件,并将其命名为"输出"自定义构建步骤:

enter image description here

它可以比较用于确定是否重新签名。每次构建项目时,如果重新生成目标图像(您的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不同。

无论如何,我是怎么做到的。希望你也可以。