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 服务,但问题仍然存在。你能在这个过程中指导我吗?
解决方案
您的[Run]
条目依赖于node
在PATH
。
如果您刚刚安装了 Note.js,则不会出现这种情况,因为PATH
Node.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
解决方案将更易于实施。
推荐阅读
- ios - 如何永久关闭 iOS 模拟器(React Native)
- swift - 通过点击任意位置关闭侧边菜单
- python - 从命令行传递给 SOAP 参数
- android - Kotlin 上的 Butterknife 不能用于绑定颜色和 Drawables AndroidX
- react-native - 是否可以将 javascript 源捆绑在 react-native 模块中
- node.js - AWS Lambda 动态数据库切换 Singelton(节点)
- python - Microsoft Visual Code 中的 Anaconda 提示而不是 PS
- java - 如何授予本机可执行文件权限
- python - 从嵌套字典对象列表创建 DataFrame
- mysql - 获取每种类型的最新记录