使用退出代码0x1的Inno Setup失败了signtool

Mau*_*wer 6 signing inno-setup code-signing code-signing-certificate

突然,我的Inno Setup编译器停止工作.自从我上次使用它以来,我刚刚安装了一份新的证书给同一家公司.

我已经以这种方式配置了签名工具(NAME是证书中Subject的字符串的开头):

mysigntool="C:\Program Files (x86)\Microsoft SDKs\Windows\v7.1A\Bin\signtool.exe" sign /v /a /s my /n NAME /t http://timestamp.verisign.com/scripts/timestamp.dll
Run Code Online (Sandbox Code Playgroud)

然后在Inno Setup .iss文件中我有:

SignTool=mysigntool
SignedUninstaller=yes
Run Code Online (Sandbox Code Playgroud)

如果我删除/ t和时间戳,则符号总是以退出代码0x1失败.请注意,如果我从命令提示符运行相同的命令,则签名工作正常.

Mir*_*ral 10

您需要添加$f到SignTool的末尾(在IDE设置中,而不是脚本),以便实际传递要签名的文件的名称.这就是您收到"缺少文件名"错误的原因.

请参阅Inno帮助文件中的示例.


Mar*_*ryl 6

显然,首先要尝试的是运行signtool.exe独立程序,看看它输出了什么错误。

(我知道你已经尝试过了)。


如果您不能以这种方式重现问题,请从命令行运行 Inno Setup 编译器。您将看到signtool的输出以及其他编译器的输出。

如果signtool失败,当从 Inno Setup GUI 编译时,它的控制台只是短暂地闪烁,所以你没有机会看到它的输出。


或者,您可以将 包装signtool.exe到批处理文件并从 Inno Setup 调用批处理而不是signtool. 在批处理文件的末尾pause,如果签名失败,则调用。这样您甚至可以在 Inno Setup GUI 中看到错误。

批处理文件可能如下所示:

@echo off

c:\path\signtool.exe %*

set SIGN_RESULT=%ERRORLEVEL%

if %SIGN_RESULT% equ 0 (
  echo Signing succeeded
  exit /B 0
)

echo Signing failed with %SIGN_RESULT%
pause

exit /B %SIGN_RESULT%
Run Code Online (Sandbox Code Playgroud)

另请参阅Inno Setup - Signing failed with "Sign Tool failed with exit code 0x1"