使用Inno Setup时,signtool失败,退出代码为0x1。

9

我的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

即使我删除了/t和时间戳,签名总是失败并显示退出代码0x1。请注意,如果我从命令提示符中运行相同的命令,则签名可以完美地工作。


signtool.exe 输出的是什么? - Martin Prikryl
从Inno Setup中我没有得到太多细节。当我点击运行或编译时,我只会得到以下信息: “编译器错误! 签名工具以退出代码0x1失败。” - Mauro Ganswer
3个回答

11
你需要在IDE设置中将$f添加到SignTool的末尾(而不是脚本),以便实际传递要签名的文件名。这就是为什么会出现“缺少文件名”错误的原因。
请参阅Inno帮助文件中的示例。

6

首先尝试运行signtool.exe独立程序,查看其输出的错误信息。

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


如果你无法通过此方法重现问题,请从命令行中运行Inno Setup编译器。你将看到signtool的输出以及其他编译器的输出。

如果在从Inno Setup GUI编译时signtool失败,控制台会快速闪烁一下,因此你没有机会看到其输出。


另外,你可以将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%

另请参阅Inno Setup - 签名失败,显示“Sign Tool failed with exit code 0x1”


1
虽然您可能没有要求,但从您提供的信息来看,您永远不会得到更好的答案。这不是一个讨论论坛,而是一个问答网站。您只能获得与您的问题一样好的答案。 - Martin Prikryl

2
在Windows 10 SDK及更高版本中,您需要指定一个fd参数。例如:signtool.exe sign /debug /fd SHA256 /f "C:\selfcert.pfx" /t http://timestamp.comodoca.com/authenticode /p mypassword1234! myfile.exe 来自https://learn.microsoft.com/en-us/windows/win32/seccrypto/signtool
Windows 10 SDK、Windows 10 HLK、Windows 10 WDK和Windows 10 ADK builds 20236及更高版本需要指定摘要算法。SignTool签名命令在签名和时间戳期间需要指定/fd文件摘要算法和/td时间戳摘要算法选项。如果在签名期间未指定/fd或在时间戳期间未指定/td,则会抛出警告(错误代码为0)。在后续版本的SignTool中,该警告将变成错误。SHA256被推荐并被业界认为比SHA1更安全。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接