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

问题描述 投票:0回答:3

突然我的 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。请注意,如果我从命令提示符运行相同的命令,则签名工作正常。

inno-setup code-signing signing code-signing-certificate
3个回答
11
投票

您需要将

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

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


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%

另请参阅 Inno Setup - 签名失败,并显示“签名工具失败,退出代码 0x1”


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 构建 20236 及更高版本需要指定摘要算法。这 SignTool 签名命令需要

/fd
文件摘要算法和
/td
签名期间指定的时间戳摘要算法选项 和时间戳。警告(错误代码 0,最初) 如果在签名期间未指定
/fd
并且 /td 为 时间戳期间未指定。在 SignTool 的更高版本中, 警告将变成错误。推荐并考虑使用 SHA256 业界认为比 SHA1 更安全。

© www.soinside.com 2019 - 2024. All rights reserved.