我正在将Java程序安装为带有捆绑JRE文件夹的exe。我无法通过设置成功调用应用程序捆绑的java.exe
。
所以我的笔记本电脑已经安装了Java,因此可以正常工作:
[Files]
Source: "jre\*"; DestDir: "{app}\jre"; Flags: ignoreversion recursesubdirs createallsubdirs
Source: "build\launch4j\Application Lite.exe"; DestDir: "{app}"; Flags: ignoreversion; \
AfterInstall: MyAfterInstall
[Code]
procedure MyAfterInstall();
var ResultCode: Integer;
begin
Exec(
'cmd.exe',
'/c java -cp ' + AddQuotes(ExpandConstant('{app}\Application Lite.exe')) +
' com.examplesoftware.applicationlite.support.hibernateSupport',
'', SW_SHOW, ewWaitUntilTerminated, ResultCode);
end;
{app}
默认为c:\Example Software\Application Lite
。
当我尝试使用捆绑的JRE时,以下内容不起作用:
[Code]
procedure MyAfterInstall();
var ResultCode: Integer;
begin
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, ewWaitUntilTerminated, ResultCode);
end;
我得到了错误:
'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',
'', SW_SHOW, ewWaitUntilTerminated, ResultCode);
并复制它起作用的命令。我不明白为什么它会破裂。
答案 0 :(得分:1)
您不需要cmd
,只会使它更加复杂。这应该起作用:
Exec(
ExpandConstant('{app}\jre\bin\java.exe'),
'-cp ' + AddQuotes(ExpandConstant('{app}\Application Lite.exe')) +
' com.examplesoftware.applicationlite.support.hibernateSupport',
'', SW_SHOW, ewWaitUntilTerminated, ResultCode);
如果它不起作用,并且您想debug the command with the cmd /k
,则需要wrap whole command to double-quotes:
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, ewWaitUntilTerminated, ResultCode);