gpt4 book ai didi

visual-studio-2010 - 项目和部署项目的构建后事件输出路径

转载 作者:行者123 更新时间:2023-12-04 02:57:12 26 4
gpt4 key购买 nike

我正在开发一个程序,在将每个 exe 打包到 MSI 部署项目之前需要对其进行签名。我试过使用 VS2010 的签名工具(“Sign the Assembly”),但 key 文件似乎不喜欢 VS2010。 VS 不要求输入密码或任何密码,也不对 exe 进行签名。因此,我一直在通过构建后命令行运行签名工具。

在我们介入太多之前,我们应该看一下应用程序的当前结构(我无法控制这个。我只是在制作更新程序并尝试测试打包):

  • 父文件夹
    • 主 EXE 项目文件夹
    • Updater 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。 (或者一般来说……有更好的方法吗?)

最佳答案

我的方法是在我的部署项目的 PostBuildEvent 属性中添加以下行(假设我需要使用存储在智能卡上的证书(/a 选项)并且 signtool 路径不能通过环境变量确定):

call "C:\Program Files (x86)\Windows Kits\8.0\bin\x86\signtool.exe" sign /a /d "$(SolutionName)" /q "$(BuiltOuputPath)"

这将对生成的 MSI 进行签名,但不会对随附的 EXE 文件进行签名。为此,我还在我的 C# 项目的构建后事件中添加了以下行(项目 > 属性 > 构建事件):

call "C:\Program Files (x86)\Windows Kits\8.0\bin\x86\signtool.exe" sign /a /d "$(SolutionName)" /q "$(TargetDir)$(TargetFileName)" "$(ProjectDir)obj\$(ConfigurationName)\$(TargetFileName)"

这样做将在成功构建后签名:

  1. 从我的 C# 项目构建的 EXE 文件(在 bin 目录下)
  2. 我的部署项目用作“主要输出”的 EXE 文件(在 obj 目录下)
  3. 最后是 MSI 包

然后,最后,我没有任何未签名的可执行文件,这正是我要找的:)

关于visual-studio-2010 - 项目和部署项目的构建后事件输出路径,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16324386/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com