我正在开发一个程序,该程序需要在打包到 MSI 部署项目之前对每个 exe 进行签名。我试过使用 VS2010 的签名工具(“签署程序集”),但密钥文件似乎不像 VS2010。VS 不要求输入密码或任何密码,也不签署 exe。所以,我一直在通过 post-build 命令行运行签名工具。
在我们过多参与之前,我们应该看一下应用程序的当前结构(我无法控制它。我只是在制作更新程序并尝试测试打包):
- 父文件夹
- 主 EXE 项目文件夹
- 更新程序 EXE 项目文件夹
- 服务项目文件夹
- 安装程序设置(卸载过程等)项目文件夹
- 部署项目文件夹
- 签名文件夹
我在某处读到部署项目在不同的文件夹(obj/x86/Release/app.exe
而不是bin/Release
)中生成 exe。
我目前确保签署文件的方法是硬编码路径,如下所示:
"..\..\..\..\SigningFolder\signtool" sign /f "..\..\..\..\SigningFolder\myKeyFile.p12" /p mypassword /t http://somecertsite.com "..\..\..\..\Updater\Updater\obj\x86\Release\Updater.exe"
"..\..\..\..\SigningFolder\signtool" sign /f "..\..\..\..\SigningFolder\myKeyFile.p12" /p mypassword /t http://somecertsite.com "..\..\..\..\Updater\Updater\bin\Release\Updater.exe"
这让我的眼睛流血了。(每个 EXE 都会发生这种情况,并且在构建 MSI 后,我也会签署 MSI。
所以,我的问题:
- 有没有办法以路径的绝对输出为目标?如果我使用
$(OutDir)
,它指向bin\Release
通过部署项目进行编译时。(或者一般......有没有更好的方法来做到这一点?)