Установщик Inno Setup не может запустить приложение, только что установленное дочерним установщиком (Невозможно запустить узел. Не удалось создать процесс) - PullRequest
0 голосов
/ 03 мая 2018

Я написал скрипт для установки Node.js, запуска скрипта оболочки и службы Windows с помощью Inno Setup. Я создал установку. После установки моя установка Node.js успешно устанавливается.

[Run]    
Filename: "msiexec.exe"; Parameters: "/i ""{app}\nodejs\node-v8.11.1-x64.msi""";

Сценарии оболочки работают успешно.

[Code]
procedure CurStepChanged(CurStep: TSetupStep);
var
  ErrorCode: Integer;
  ReturnCode: Boolean;
begin
  ExtractTemporaryFile('Add-AppDevPackage.ps1');
  ReturnCode :=
    ShellExec('open', '"PowerShell"',
    ExpandConstant(' -ExecutionPolicy Bypass -NoLogo -NonInteractive -NoProfile -WindowStyle Hidden  -File "{app}\setup\Add-AppDevPackage.ps1"'),
    '', SW_SHOWNORMAL, ewWaitUntilTerminated, ErrorCode);

    if (ReturnCode = False) then
        MsgBox('Message about problem. Error code: ' + IntToStr(ErrorCode) + ' ' + SysErrorMessage(ErrorCode),
          mbInformation, MB_OK);
end;

Но когда я пытаюсь запустить службу Windows, которая является файлом .js (installservice.js), я получаю сообщение об ошибке типа

Невозможно запустить узел. Не удалось создать процесс code2.

Код, используемый для запуска узла:

[Run]
Filename: "node"; Parameters: "installservice.js"; WorkingDir: "{app}\nodepath"; \
    Flags: nowait postinstall skipifsilent runascurrentuser; AfterInstall: MsbShow;

И я также обнаружил, что , если Node JS уже установлен на машине, тогда служба Windows устанавливается и отлично работает . Я не знаю, где ошибка. Я даже пытался запустить службу Windows после установки, но проблема не исчезла. Можете ли вы направить меня в этом процессе?

1 Ответ

0 голосов
/ 03 мая 2018

Ваша запись [Run] полагается на node в PATH.

Это не будет иметь место, если вы установили Note.js только сейчас, так как изменение PATH установщиком Node.js не отразится на уже запущенных процессах (особенно в вашем установщике Inno Setup).

Вы должны явно перезагрузить среду перед запуском программы.

[Run]
Filename: "node"; BeforeInstall: RefreshEnvironment; ...

Где реализация RefreshEnvironment показана в:
Переменная среды не распознана [недоступна] для программ [Выполнить] в Inno Setup


Или, конечно, вы можете использовать абсолютный путь к node. Но тогда вам нужно либо положиться на установщик Node.js, чтобы установить Node.js в стандартном месте (я предполагаю путь здесь, я не знаю Node.js):

[Run]
Filename: "{pf}\Node.js\node"; ...

(что может быть ненадежным).

В противном случае вам придется программно определять место установки, и в этом случае приведенное выше решение RefreshEnvironment будет проще для реализации.

...