Как запустить команду с путем, включая пробелы (в комплекте JRE), при использовании AfterInstall с Inno Setup - PullRequest
1 голос
/ 17 мая 2019

Я устанавливаю программу на Java в виде exe-файла со связанной папкой JRE. Я не могу получить настройки для успешного вызова связанного 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 Ответ

1 голос
/ 20 мая 2019

Вам не нужно cmd, это только усложняет. Это должно работать:

Exec(
  ExpandConstant('{app}\jre\bin\java.exe'),
  '-cp ' + AddQuotes(ExpandConstant('{app}\Application Lite.exe')) + 
    ' com.examplesoftware.applicationlite.support.hibernateSupport',
  '', SW_SHOW, ewWaitUntilTerminated, ResultCode);

Если это не сработало, и вы хотите отладить команду с помощью cmd /k, вам нужно обернуть всю команду в двойные кавычки :

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);
...