Java 在使用Inno安装程序的AfterInstall时,如何使用包含空格的路径(捆绑的JRE)运行命令

Java 在使用Inno安装程序的AfterInstall时,如何使用包含空格的路径(捆绑的JRE)运行命令,java,cmd,inno-setup,pascalscript,Java,Cmd,Inno Setup,Pascalscript,我正在安装一个Java程序作为一个带有捆绑JRE文件夹的exe。我无法让安装程序使用我的应用程序成功调用捆绑的java.exe 因此,我的笔记本电脑已经安装了Java,因此以下功能可以正常工作: [文件] 资料来源:“jre\*”;DestDir:“{app}\jre”;标志:ignoreversion recursesubdirs createallsubdirs 来源:“build\launch4j\Application Lite.exe”;DestDir:“{app}”;标志:忽略版本\

我正在安装一个Java程序作为一个带有捆绑JRE文件夹的exe。我无法让安装程序使用我的应用程序成功调用捆绑的
java.exe

因此,我的笔记本电脑已经安装了Java,因此以下功能可以正常工作:

[文件]
资料来源:“jre\*”;DestDir:“{app}\jre”;标志:ignoreversion recursesubdirs createallsubdirs
来源:“build\launch4j\Application Lite.exe”;DestDir:“{app}”;标志:忽略版本\
后安装:MyAfterInstall
[代码]
程序MyAfterInstall();
var结果代码:整数;
开始
执行官(
'cmd.exe',
'/c java-cp'+AddQuotes(ExpandConstant('{app}\Application Lite.exe'))+
'com.examplesoftware.applicationlite.support.hibernateSupport',
'',软件显示,EWWAIT未过滤,结果代码);
结束;
其中,
{app}
默认为
c:\Example Software\Application Lite

当我尝试使用捆绑的JRE时,以下情况不起作用:

[代码]
程序MyAfterInstall();
var结果代码:整数;
开始
执行官(
'cmd.exe',
'/k'+AddQuotes(ExpandConstant('{app}\jre\bin\java.exe'))+
'-cp'+AddQuotes(ExpandConstant('{app}\Application Lite.exe'))+
'com.examplesoftware.applicationlite.support.hibernateSupport',
'',软件显示,EWWAIT未过滤,结果代码);
结束;
我得到一个错误:

“c:\Example”未被识别为内部或外部命令, 可操作的程序或批处理文件

如果我对如下代码使用
echo

Exec(
'cmd.exe',
'/k echo'+AddQuotes(ExpandConstant('{app}\jre\bin\java.exe'))+
'-cp'+AddQuotes(ExpandConstant('{app}\Application Lite.exe'))+
'com.examplesoftware.applicationlite.support.hibernateSupport',
'',软件显示,EWWAIT未过滤,结果代码);

并复制它工作的命令。我不明白它为什么会坏。

您不需要
cmd
,它只会让它变得更复杂。这应该起作用:

Exec(
ExpandConstant(“{app}\jre\bin\java.exe”),
'-cp'+AddQuotes(ExpandConstant('{app}\Application Lite.exe'))+
'com.examplesoftware.applicationlite.support.hibernateSupport',
'',软件显示,EWWAIT未过滤,结果代码);

如果它不起作用,并且您希望这样做,那么您需要:

Exec(
'cmd.exe',
“/k””+AddQuotes(ExpandConstant(“{app}\jre\bin\java.exe”))+
'-cp'+AddQuotes(ExpandConstant('{app}\Application Lite.exe'))+
“com.examplesoftware.applicationlite.support.hibernateSupport”,
'',软件显示,EWWAIT未过滤,结果代码);

您是否尝试过简单的
Exec(ExpandConstant({app}\jre\bin\java.exe')、'-cp'+AddQuotes(ExpandConstant({app}\Application Lite.exe'))+'com.examplesoftware.applicationlite.support.hibernateSupport'、''、SW_SHOW、ewwaitunterminated、ResultCode)
?但您确定
{app}\Application Lite.exe
的搜索路径是否正确?不应该只是
{app}
?@MartinPrikryl-well“Application Lite.exe”是一个包装好的jar,其中包含一个支持类,调用该类时会在MySQL中创建必要的表。如果我运行
Exec('cmd.exe','/k echo…'
我会得到:“c:\Example Software\Application Lite\jre\bin\java.exe”-cp“c:\Example Software\Application Lite\Application Lite.exe”com.examplesoftware.applicationlite.support.hibernateSupport如果我在cmd中复制粘贴它,它就会工作。或者,在整个命令后面加上另一对引号(
/k
)(
/c
),比如:
Exec('cmd.exe','/k'+AddQuotes(ExpandConstant('{app}\jre\bin\java.exe'))+'-cp'+AddQuotes(ExpandConstant('app}}\Application Lite.exe'))+'com.examplesoftware.applicationlite.support.hibernateSupport','',SW_SHOW,ewwaitUnterminated,ResultCode);
但是它甚至应该与
Exec(ExpandConstant('{app}\jre\bin\java.exe'),'-cp'+AddQuotes(ExpandConstant('{app}\Application Lite.exe'))一起工作+'com.examplesoftware.applicationlite.support.hibernateSupport','',软件显示,EWAitUnFilterminated,结果代码)