在Inno Setup中使用AfterInstall时如何运行包含空格的路径(捆绑的JRE)的命令

时间:2019-05-17 12:55:11

标签: java cmd inno-setup pascalscript

我正在将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);

并复制它起作用的命令。我不明白为什么它会破裂。

1 个答案:

答案 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);