我编写了脚本来安装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服务,但问题仍然存在。你能指导我这个过程吗?
答案 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
解决方案将更容易实现。