Inno Setup 的 signtool 失败,退出代码为 0x1

signtool fail with Inno Setup with exit code 0x1

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

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

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

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

SignTool=mysigntool
SignedUninstaller=yes

标志总是失败,退出代码为 0x1,如果我删除 /t 和时间戳也是如此。请注意,如果我 运行 从命令提示符中执行相同的命令,签名将完美无缺。

显然,首先要尝试 运行 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%

另见

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

参见 Inno help file 中的示例。