使用 NSIS 脚本签署 exe 文件

Sign the exe file using NSIS script

我正在使用 NSIS 脚本生成 exe 文件。

现在我必须签署 exe,我正在做的是使用 NSIS,首先创建 exe 文件。然后我在管理员模式下打开命令提示符和 运行 Signtool.exe 文件以及 pfx 文件的路径、时间戳 url 等参数来签署 exe 并且它的签署没有任何问题

但我发现在 NSIS 中使用 Finalize http://nsis.sourceforge.net/Docs/Chapter5.html#finalize 我们可以从 NSIS 脚本本身调用 Signtool 命令

因此,我尝试制作一个 .bat 文件,其中包含用于在其中签名 exe 的代码,并将 bat 文件保存在 nsis 脚本的相同位置,最后我调用了这行代码

 !finalize 'signfile.bat'

但这导致了以下消息

Finalize command: signfile.bat 'signfile.bat' is not recognized as an internal or external command, operable program or batch file. Finalize command returned 1

我试过像下面这样直接签名

 Signtool.exe sign /f k:\---.pfx /p ????? /tr http://timestamp.----.com /td sha256 /fd sha256 "%1"

Signtool.exe sign /f k:\--.pfx /p ????? /tr http://timestamp.---.com /td sha256 /fd sha256 filename.exe

然后我得到这个错误

!finalize 需要 1-3 个参数,得到了 13 个。 用法:!finalize command_with_%1 []

所以任何人都可以帮助找出用于直接从 nsis 脚本签署 exe 文件的正确语法

当 运行 .bat 来自 cmd.exe 时,您收到的错误消息是因为它找不到文件。您可以尝试 !finalize dir 找出当前目录的实际内容。

引用语法为!finalize '"c:\path\to\app.exe" "par am 1" param2 "par am 3"'