【问题标题】:Inno Setup - npm program added to PATH by subinstaller is not recognized in a batch file executed from installer [duplicate]Inno Setup - 从安装程序执行的批处理文件中无法识别由子安装程序添加到 PATH 的 npm 程序 [重复]
【发布时间】:2018-05-20 18:42:06
【问题描述】:

我使用 Inno Setup 为我制作的应用程序创建了一个 Windows 安装程序。作为安装程序的一部分,我已经包含了一些第三方应用程序的安装和一个批处理文件,以执行一些npm 命令可运行的程序或批处理文件。

一切安装正常,但是当批处理文件运行时,我收到消息

'npm' 未被识别为内部或外部命令

命令不运行,因此应用无法打开。但是,如果我将所有内容保持原样并在安装后再次重新运行批处理文件,则命令会执行并且应用程序可以正常工作。如何让批处理文件在安装过程中正常运行?

Inno 设置Run 部分

[Run]
Filename: "{tmp}\Git-2.15.0-64-bit.exe";  Flags: waituntilterminated
Filename: "{tmp}\rubyinstaller-2.3.3-x64.exe";  Flags: waituntilterminated
Filename: "{tmp}\visualcppbuildtools_full.exe";  Flags: waituntilterminated
Filename: "msiexec.exe"; Parameters: "/i ""{tmp}\mongodb-win32-x86_64-2008plus-ssl-3.4.10-signed.msi"; WorkingDir: {tmp}; Flags: waituntilterminated
Filename: "msiexec.exe"; Parameters: "/i ""{tmp}\node-v6.11.0-x64.msi"; WorkingDir: {tmp}; Flags: waituntilterminated
Filename: "{tmp}\setup.bat";
Filename: "{app}\{#MyAppExeName}"; Description: "{cm:LaunchProgram,{#StringChange(MyAppName, '&', '&&')}}"; Flags: shellexec postinstall skipifsilent

批处理文件

cd C:/Users/%USERNAME%/Documents/myApp/api/
call npm install -g bower
call npm install -g grunt
call npm install -g grunt-cli
call npm config set msvs_version 2015 -global
call npm install bcrypt -save
call npm install
cd ../admin/
call npm install -g bower
call npm install -g grunt
call npm install -g grunt-cli
echo 1 | call gem install compass
call bower install
call npm install 

【问题讨论】:

  • 我遗漏了文件名:"{tmp}\python-3.5.4-amd64-webinstall.exe";标志:waituntilterminated 也已安装
  • 它不知道NPM在哪个文件夹。你需要给它完整的路径。

标签: node.js batch-file npm inno-setup


【解决方案1】:

如果批处理文件在您的安装程序完成后工作,其中一个子安装程序可能会将npm 添加到PATH 环境变量中。但是对环境的更改不会自动应用于现有进程(包括 Inno Setup 安装程序本身)及其子进程(包括从 Inno Setup 安装程序执行的批处理文件),只会应用于新进程。

您必须在运行批处理文件之前显式重新加载环境。

[Run]
Filename: "{tmp}\setup.bat"; BeforeInstall: RefreshEnvironment

RefreshEnvironment 实现显示在:
Environment variable not recognized [not available] for [Run] programs in Inno Setup


或者您当然可以在批处理文件中使用绝对路径。但为此,您必须根据安装位置动态生成批处理文件。

或者从npm 目录运行批处理文件。为此使用WorkingDir parameter

【讨论】:

    【解决方案2】:

    我猜安装程序不会为您修改 PATH,因此 npm 没有被别名为命令。如果您使用可执行文件的绝对路径调用 npm,它应该会按预期工作。

    【讨论】:

    • 感谢 Squshman 和 posit labs,会尝试一下
    • 如果安装程序没有修改PATH,安装程序完成后批处理文件将如何工作?
    • 应该修改PATH吗?我不这么认为。如果安装程序不询问就覆盖了我的节点版本,我不会非常高兴。
    猜你喜欢
    • 1970-01-01
    • 2018-01-18
    • 2015-05-21
    • 1970-01-01
    • 1970-01-01
    • 2022-10-24
    相关资源
    最近更新 更多