调试从 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
我正在尝试使用 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