调试从 Inno Setup 安装程序执行的非工作批处理文件或命令

Debugging non-working batch file or command executed from Inno Setup installer

我正在尝试使用 Inno Setup 通过命令行将 Tomcat 作为服务安装在 Windows 10 上,但我 运行 遇到了问题,目前这是我的语法。

[Run] 
Filename: net.exe; Flags: runascurrentuser; parameters: "user elt_user TrackFox38# /add"

; installs tomcat makes it run as a service NOTE THAT IN INNO THIS IS A SINGLE LINE
Filename: {src}\..\apache-tomcat-7.0.69\bin\service.bat; Flags: runascurrentuser; parameters: "tomcat7 //IS//Tomcat7 --DisplayName='Apache_Tomcat_7' ^ --Install='C:\Program Files\Tomcat\bin\tomcat7.exe' --Jvm=auto ^ --StartMode=jvm --StopMode=jvm ^ --StartClass=org.apache.catalina.startup.Bootstrap --StartParams=start ^ --StopClass=org.apache.catalina.startup.Bootstrap --StopParams=stop"

奇怪的是,当我手动将它粘贴到命令行时它起作用了。起初我认为这是一个权限问题,但 net.exe 命令有效并且 Tomcat 的事实并没有使这个问题成为问题。此外,我还需要将权限设置为管理员,并且该应用程序需要管理员权限才能启动安装程序,因此我认为这不是用户问题。我是 Inno Setup 的新手,有点卡在这里。

调试输出:

[09:18:54.770] Filename: C:\program\Output\..\apache-tomcat-   7.0.69\bin\service.bat 
[09:18:54.771] Parameters: tomcat7 //IS//Tomcat7 --DisplayName='Apache_Tomcat_7' ^ --Install='C:\Program Files\Tomcat\bin\tomcat7.exe' --Jvm=auto ^ --StartMode=jvm --StopMode=jvm ^ --StartClass=org.apache.catalina.startup.Bootstrap --StartParams=start ^ --StopClass=org.apache.catalina.startup.Bootstrap --StopParams=stop 
[09:18:54.867] Process exit code: 0

当您执行批处理文件(或任何命令)时,其结果(或错误)要么根本不可见(特别是在使用 runhidden 标志时),要么消失得如此之快以至于您无法阅读它们.

在这种情况下,运行 命令通过 cmd.exe 显式执行(Inno Setup 在 运行 批处理文件时自行隐式执行),但这次使用 /K 开关而不是更常见的 /C 开关。 /K 开关确保控制台 window 不会自行关闭。当然,删除 runhidden 标志。

所以代替:

[Run] 
Filename: {app}\setup.bat; Parameters: "arguments"

或等效项:

[Run] 
Filename: {cmd}; Parameters: "/C """"{app}\setup.bat"" arguments"""

使用:

[Run] 
Filename: {cmd}; Parameters: "/K """"{app}\setup.bat"" arguments"""

然后控制台 window 在 setup.bat 完成后保留,您可以看到最终的错误。

如果批处理文件以隐藏正在执行的命令的普通 @echo off 命令开头,暂时用 rem 注释掉这一行也有助于调试。

有关在 cmd 命令行中引用参数,请参阅:
Correct quoting for cmd.exe for multiple arguments