使用NSIS脚本

时间:2018-04-14 02:36:52

标签: exe nsis code-signing

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

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

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

所以为了做到这一点,我尝试制作一个带有代码的.bat文件,用于在其中签署exe并将bat文件保存在nsis脚本的相同位置,我最后调用了这行代码

 !finalize 'signfile.bat'

但是这导致了以下消息

  

Finalize命令:signfile.bat'signfile.bat'无法识别为   内部或外部命令,可操作程序或批处理文件。   Finalize命令返回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文件的正确语法

1 个答案:

答案 0 :(得分:3)

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

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