在Inno设置中,我的签名工具定义为:
cmd /k "C:Program Files (x86)Windows Kits10bin10.0.19041.0x64signtool.exe" sign /t http://timestamp.comodoca.com /n "My Company" $f
准备cmd /k
(如Inno Setup中所建议的-使用"Sign Tool failed with exit code 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 FilesMicrosoft Platform SDK for Windows Server 2003 R2Binsigntool.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 Kits10bin10.0.19041.0x64signtool.exe" sign /t http://timestamp.comodoca.com /n "My Company" $f
正如你所看到的,我们以同样的方式使用引号。我会检查更新——我可能应该先检查一下。当我有时间的时候,我会恢复signtool的定义,看看更新是否能修复它
此外,我本应该更清楚一点。我是Inno Setup的新手,我没有想过要澄清这一点。我正在通过Inno Script Studio
进行编译。我突然想到,这可能与特定版本的Script Studio中的行为有关,而不是编译器本身,但我对内部工作原理的了解还不够,只能猜测。
在做了更多的修补之后,我现在可以肯定这一定是Inno Setup的一个错误。我围绕实现了工作,如下所示:
- 使用提升的权限打开命令窗口
- 更改为我创建的名称中没有空格的目录:
cd bin
- 创建指向
signtool.exe
所在目录的"无空间"符号链接:mklink /d "Windows10SDK" "C:Program Files (x86)Windows Kits10bin10.0.19041.0x64"
- 输入使用符号链接的新符号工具定义:
C:binWindows10SDKsigntool.exe sign /t http://timestamp.comodoca.com /n "My Company" $f
就这样!由于signtool.exe
的路径中不再有空格字符,Inno Setup现在可以正确执行签名,一切都很顺利。
我会将此报告为错误,并在需要时进行更新。
我使用:
#define SignedDesc "$q" + MSA + "$q"
#define SignedPfx "$qd:My Certificate2018My 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 Kits10bin10.0.16299.0x86Signtool.exe$q sign $p
您必须使用$q
,它是一个引号。