程序签名的自动化实现

凡是对外发布的程序,都需要加上公司的签名,这段时间在做Fansbook上Web版本的征服,由于动态下载/帐号服务等各种机制,通常都需要用加过签名的程序打包上传后才能进行较完整的测试

而目前加签名的方式相对比较繁琐,是通过双击signcode.exe,然后采用向导方式来做,选择要加密的程序,pvk/spc,输入密码,每次都要一顿点,即使不算选择文件路径,鼠标左键也要点个近30下吧,劳神费力


即使使用命令后方式:

signcode /spc mycert.spc /v mykey.pvk Conquer.dll

虽然省了10+次鼠标操作,也还是要经过输入密码的过程,且要保证被加密程序的路径


有否办法不输入密码呢,答案是肯定的


在windows SDK tools中,提供了以下两个工具

signtool.exe
pvk2pfx.exe


基于这两个工具,可以写一个批处理 sign.bat

cd %~dp0
pvk2pfx.exe -pvk mykey.pvk -spc mycert.spc -pfx myTest.pfx -pi <psw> -f
signtool.exe sign /f myTest.pfx /p <psw> /v %1

然后在vs中建一个tools项目,以vs6为例:

tools/customize  tools选项卡 添加一项 Sign

Command:    D:\SDK\sign\Sign.bat
Arguments:    $(TargetPath)

再勾上 Use Output Window


然后可以在tools/customize Commands选项卡中,Category选择tools,把新建的这个tools拉到工具栏,这样轻轻一点,就可以对项目生成的程序打好签名



更近一步的,我们甚至可以让IDE在每次link完自动为我们做这个事情

Project/Setting Post-Build step选项卡

call D:\\SDK\\sign\\PBSign.bat $(TargetPath)

注意到在tools中使用和在此时使用,作为参数的$(TargetPath)的稍有不同,前者是绝对路径,而后者是相对路径,因此PBSign.bat中的程序也都用到了绝对路径


D:/SDK/sign/pvk2pfx.exe -pvk D:/SDK/sign/mykey.pvk -spc D:/SDK/sign/mycert.spc -pfx D:/SDK/sign/myTest.pfx -pi <psw> -f
D:/SDK/sign/signtool.exe sign /f D:/SDK/sign/myTest.pfx /p <psw> /v %1


这样一来,也不怕生成后忘记做签名了


PS1. 时间戳服务,这里没提及,有需要多加个参数即可
PS2. 由于参数是相对路径,所以后面一个bat里面的使用到了绝对路径,这多少显得难看又不方便,大家如果有写的更优雅的方法还请不吝赐教



参考资料


文件签名工具 (Signcode.exe)

http://msdn.microsoft.com/zh-cn/library/9sh96ycy(v=vs.80).aspx

签名工具 (SignTool.exe)

http://msdn.microsoft.com/zh-cn/library/8s9b9yaz(VS.80).aspx

Pvk2Pfx

http://msdn.microsoft.com/en-us/library/windows/hardware/ff550672(v=vs.85).aspx

你可能感兴趣的:(程序签名的自动化实现)