首页 > 解决方案 > Inno Setup 安装程序无法运行子安装程序刚刚安装的应用程序(无法运行节点。创建进程失败)

问题描述

我已经编写了脚本来安装 Node.js,使用 Inno Setup 运行 shell 脚本和 Windows 服务。我已经创建了一个设置。当我安装我的安装程序时,Node.js 会成功安装。

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

Shell 脚本成功运行。

[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;

但是当我尝试运行一个 .js 文件 ( installservice.js) 的 Windows 服务时,我收到一个错误,例如

无法运行节点。创建进程失败代码2。

用于运行节点的代码:

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

而且我还发现,如果机器中已经安装了 Node JS,那么Windows 服务就可以完美地安装和运行。我不知道错误在哪里。我什至尝试在安装后运行 Windows 服务,但问题仍然存在。你能在这个过程中指导我吗?

标签: node.jsinno-setuppascalscript

解决方案


您的[Run]条目依赖于nodePATH

如果您刚刚安装了 Note.js,则不会出现这种情况,因为PATHNode.js 安装程序所做的更改不会反映在已经运行的进程中(尤其是您的 Inno Setup 安装程序)。

您必须在运行程序之前显式重新加载环境。

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

RefreshEnvironment实现显示在:Inno
Setup 中的 [Run] 程序无法识别环境变量 [不可用]


当然,您也可以使用node. 但是您要么必须依靠 Node.js 安装程序将 Node.js 安装到标准位置(我在这里猜测路径,我不知道 Node.js):

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

(什么可能不可靠)。

或者您必须以编程方式检测安装位置,在这种情况下,上述RefreshEnvironment解决方案将更易于实施。


推荐阅读