使用 Inno Setup,我最近尝试从调用 Compil32 批量创建设置转向使用“iscc”。 以下无需签名即可正常工作(从 C# 代码的批处理文件执行):
iscc "C:\Inno Setup Scripts\test.iss"
但是当我尝试添加签名时,未创建设置:
iscc "C:\Inno Setup Scripts\test.iss" /Ssigntool="C:\Program Files (x86)\Windows Kits\10\bin\10.0.22621.0\x64\signtool" sign /f "C:\Test PFX\test.pfx" /tr http://timestamp.sectigo.com /td sha256 /fd sha256 /a /p codeSigningPassword $f
codeSigningPassword
是C#代码中设置的密码。
我怀疑这可能与我放置引号有关 - 我认为它们应该绕过任何有空格的文件路径。
带有
/S...
命令行的整个 signtool
参数必须用双引号引起来。内部引号需要转义为 $q
:
iscc "C:\Inno Setup Scripts\test.iss" "/Ssigntool=$qC:\Program Files (x86)\Windows Kits\10\bin\10.0.22621.0\x64\signtool$q sign /f $qC:\Test PFX\test.pfx$q /tr http://timestamp.sectigo.com /td sha256 /fd sha256 /a /p codeSigningPassword $f"
您正在尝试的命令行语法意味着您的 .iss 文件需要包含相应的
SignTool
指令:
[Setup]
SignTool=signtool
SignedUninstaller=yes
参见 https://jrsoftware.org/ishelp/index.php?topic=setup_signtool
替代方案是:
signtool
指令在 .iss 文件中定义 SignTool
命令行;signtool
命令行包装到批处理文件中,并在 iscc
命令行中使用批处理文件路径。