【问题标题】:Issue with Inno Setup SignTool optionInno Setup SignTool 选项的问题
【发布时间】:2026-01-24 18:45:02
【问题描述】:

我的 Inno 设置脚本中有以下行:

SignTool=MySign cmd /c C:\SigningTools\signtool.exe sign /f C:\MyCert.pfx /p MyPassword $f

工作在我的本地机器上。

然后我将更改提交到我们的服务器,Jenkins 将自动编译并进行构建。 Jenkins 不起作用,我收到以下错误。

Error on line 43 in C:\Windows\TEMP\fxbundler8328922406343131203\images\win-exe.image\MyProgram.iss: Value of [Setup] section directive "SignTool" is invalid.
Compile aborted.

我不知道问题是什么,我尝试了很多东西,但似乎无法弄清楚。我会学习一些更好的选项来使用 Inno Setup 输出错误消息。

【问题讨论】:

  • 哪个用户在你的 windows 机器上运行 jenkins 或脚本?也许用户没有在非交互模式下运行 cmd 的权限?您应该授予用户使用 gpedit 运行本地批处理脚本和服务的权限。
  • @NwDx 我能够在 inno 安装程序运行之前签署启动器,所以我也不认为这是问题所在,用户确实有权运行 signtool.exe。感谢您的建议。
  • 这不是问题,问题是 Jenkins 在您的网络服务器上运行并且您尝试调用 cmd.exe。看看这里:*.com/a/11613662/4170073

标签: jenkins javafx javafx-8 inno-setup


【解决方案1】:

您需要在调用编译器时通过/s 开关定义SignTool。 示例:"/sMySign$q=sign_application.bat$q $f"

sign_application.bat 接收要签名的文件路径作为第一个参数并调用signtool.exe,就像您已经尝试过的那样。

看这里:http://www.jrsoftware.org/ishelp/index.php?topic=setupcmdline

【讨论】:

  • 不幸的是,这没有奏效。我没有通过 cmdline 运行 Inno Setup,因此 /s 在这种情况下没有帮助。 “他指定的签名工具名称及其命令必须在编译器 IDE(通过工具|配置签名工具...菜单)或编译器命令行(通过“/S”参数)中定义,否则会出错发生。”,我是那个或的前半部分。 Inno Setup 正在通过运行调用 的 ant 脚本来触发。
  • 当您尝试通过命令行在 ant 上构建它时会发生什么? ant.apache.org/faq.html#batch-shell-execute
  • 这是什么?甚至 Ant 脚本也会调用 inno 编译器并将几个参数传递给它。您可以在此处简单地添加/s 开关。或者 Ant 为了创建 setup.exe 做了什么?
  • 不是在部署 JavaFX 应用程序时,在捆绑为 exe 时隐藏在 JavaFX deploy 命令中的东西会调用 inno setup。不过感谢您的建议,值得一试。
【解决方案2】:

不要忘记在 Inno 设置编译器中配置签名工具。我只是添加了 signtool $p 字符串。

【讨论】:

    【解决方案3】:

    就我而言,证书已过期。

    我发现以下文章很有用: https://www.nextofwindows.com/how-to-check-a-pfx-certifications-expiry-date-on-windows

    我在我的 pfx 文件所在的目录中打开了一个命令提示符,并使用此命令获取有关证书的详细信息:

    certutil -dump "nameofcertfile.pfx"
    

    nameofcertfile.pfx 更改为您的文件名。您可能会被提示输入密码。输入您在脚本中使用的密码(OPs 脚本中的 MyPassword)。您也可以复制/粘贴它。

    注意:在输入或粘贴密码时,您不会看到任何字符被输入 - 所以不要混淆。

    【讨论】:

      最近更新 更多