Inno安装程序安装程序无法运行仅由子安装程序安装的应用程序(无法运行节点。创建进程失败)

时间:2018-05-03 08:54:05

标签: node.js 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服务,但问题仍然存在。你能指导我这个过程吗?

1 个答案:

答案 0 :(得分:1)

您的[Run]条目依赖于node中的PATH

如果您刚刚安装了Note.js,情况就不会如此,因为Node.js安装程序在PATH中的更改不会反映在已经运行的进程中(特别是你的Inno安装程序安装程序。)

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

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

RefreshEnvironment实施的位置如下:
Environment variable not recognized [not available] for [Run] programs in Inno Setup

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

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

(可能并不可靠)。

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