我正在开发一个程序,在打包到MSI部署项目之前需要对每个exe进行签名。我尝试使用VS2010的签名工具(“签署程序集”),但密钥文件似乎不兼容VS2010。VS不要求输入密码,也没有对exe进行签名。因此,我一直在通过后置构建命令行运行签名工具。
在我们深入研究之前,我们应该先看一下应用程序的当前结构(我无法控制这个,我只是在制作更新程序并尝试测试打包):
- 父文件夹 - 主exe项目文件夹 - 更新程序exe项目文件夹 - 服务项目文件夹 - 安装设置(卸载进程等)项目文件夹 - 部署项目文件夹 - 签名文件文件夹
我在某个地方看到过,部署项目会将exe生成在不同的文件夹中(obj / x86 / Release / app.exe而不是bin / Release)。
我目前确保签名文件的方法是通过硬编码路径,像这样:
"......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。(或者通常情况下...是否有更好的方式来做到这一点?)
在我们深入研究之前,我们应该先看一下应用程序的当前结构(我无法控制这个,我只是在制作更新程序并尝试测试打包):
- 父文件夹 - 主exe项目文件夹 - 更新程序exe项目文件夹 - 服务项目文件夹 - 安装设置(卸载进程等)项目文件夹 - 部署项目文件夹 - 签名文件文件夹
我在某个地方看到过,部署项目会将exe生成在不同的文件夹中(obj / x86 / Release / app.exe而不是bin / Release)。
我目前确保签名文件的方法是通过硬编码路径,像这样:
"......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。(或者通常情况下...是否有更好的方式来做到这一点?)
call "..\..\..\path\signtool" sign /f "..\..\..\Signing Files\Signer.p12" /p xxxx /t http://certs.com "$(TargetDir)$(TargetFileName)" "$(ProjectDir)obj\$(PlatformName)\$(ConfigurationName)\$(TargetFileName)"
- teynon