在 Inno Script Studio 中使用带空格的完整路径签名到 signtool.exe 失败,并显示“签名工具失败,退出代码 0x1”

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

在Inno Setup中,我的签名工具定义为:

cmd /k "C:\Program Files (x86)\Windows Kits\10\bin\10.0.19041.0\x64\signtool.exe" sign /t http://timestamp.comodoca.com /n "My Company" $f

前置

cmd /k
(如 Inno Setup - 签名失败并显示“签名工具失败,退出代码 0x1” 中建议的那样)表明签名工具本身实际上没有问题,而是 Inno Setup 调用它的方式有问题,生成以下消息:

'C:\Program' is not recognized as an internal or external command, operable program or batch file.

显然,它在第一个空格处切断了通往

signtool
的路径,即使我将其放在引号中。我什至尝试用
$q
替换引号,看看这是否有什么不同。 (事实并非如此。)我认为解析器不尊重引号是不正确的行为,因为说明明确指出要粘贴您在命令行上使用的确切文本,并且示例本身包含引号( https://revolution.screenstepslive.com/s/revolution/m/10695/l/563371-signing-installers-you-create-with-inno-setup)。

命令行中的一切都运行良好。由于某种原因,Inno Setup 无法正确调用

signtool

添加于 2020-07-14:

Inno Setup 的示例,从其网站复制:

"C:\Program Files\Microsoft Platform SDK for Windows Server 2003 R2\Bin\signtool.exe" sign /f "C:\MY_CODE_SIGNING.PFX" /t http://timestamp.comodoca.com/authenticode /p MY_PASSWORD $f

我的版本,没有使用

cmd /k

"C:\Program Files (x86)\Windows Kits\10\bin\10.0.19041.0\x64\signtool.exe" sign /t http://timestamp.comodoca.com /n "My Company" $f

如您所见,我们以相同的方式使用引号。我会检查更新 - 我可能应该先这样做。当我有时间时,我将恢复signtool定义并看看更新是否可以修复它。

另外,我应该说得更清楚。我是 Inno Setup 的新手,我没有想到要澄清这一点。我正在通过

Inno Script Studio
进行编译。我觉得这有可能与 Script Studio 的特定版本中的行为有关,而不是编译器本身,但我对内部工作原理了解不够,只能推测。

inno-setup code-signing
2个回答
2
投票

我用:

#define SignedDesc "$q" + MSA + "$q"
#define SignedPfx "$qd:\My Certificate\2018\My Certificate.pfx$q"
#define SignedTimeStamp "$qhttp://timestamp.verisign.com/scripts/timestamp.dll$q"
#define SignedPw "$q~~~~~~~$q"

SignTool=SignTool /d {#SignedDesc} /du $q{#AppURL}$q /f {#SignedPfx} /p {#SignedPw} /t {#SignedTimeStamp} /v $f

我的签名工具配置为:

$qC:\Program Files (x86)\Windows Kits\10\bin\10.0.16299.0\x86\Signtool.exe$q sign $p

您必须使用

$q
,这是一个引号。如果你看这里:

[设置]:签名工具

它说:

签名工具参数中可以使用以下特殊序列 和命令:

  • $f
    ,替换为要签名的文件的带引号的文件名。 (必填)

  • $p
    ,替换为签名工具参数。

  • $q
    ,替换为引号,对于定义签名工具很有用 包含来自命令行的引号。

  • $$
    ,替换为单个 $ 字符。


1
投票

做了一些更多的修补后,我现在相当确定这一定是 Inno Setup 的错误。我实施了一个解决方法,如下所示:

  1. 使用提升的权限打开命令窗口
  2. 更改为我创建的名称中没有空格的目录:
    cd \bin
  3. 创建指向
    signtool.exe
    所在目录的“无空间”符号链接:
    mklink /d "Windows10SDK" "C:\Program Files (x86)\Windows Kits\10\bin\10.0.19041.0\x64"
  4. 输入使用符号链接的新符号工具定义:

C:\bin\Windows10SDK\signtool.exe sign /t http://timestamp.comodoca.com /n "My Company" $f

就是这样!由于

signtool.exe
的路径中不再有空格字符,Inno Setup 现在可以正确执行签名,一切都运行良好。

我会将其报告为错误并根据需要进行更新。

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