凡是对外发布的程序,都需要加上公司的签名,这段时间在做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
转自:http://blog.csdn.net/piao_polar/article/details/6900133