【问题标题】:npm failing right after installing Node.jsnpm 在安装 Node.js 后立即失败
【发布时间】:2014-05-05 21:46:43
【问题描述】:

我正在开发一个安装程序,它可以自动安装 Node.js,将节点应用程序提取到文件夹中,然后通过 npm install 安装它。但是,安装程序总是需要运行两次才能使npm 工作。这是安装到 Windows 上。

在我的安装程序应用程序的生命周期内...

  • 如果尚未安装 Node.js,则会安装它
  • 在同一过程中,稍后执行npm install
  • 如果在安装程序启动之前 Node.js 不存在,它会失败并指出 npm 不是有效命令
  • 如果安装程序启动时已经安装了 Node.js,则安装成功

我假设Node.js 的安装会创建新的环境变量,但我的进程尚未获得这些新变量——直到进程重新启动。然后,第二次它可以看到这些变量。否则,在同一进程中,它无法找到npm,因为它无法看到新的环境变量。至少这是我缩小问题范围的唯一原因,也是为什么我总是必须运行我的安装程序两次的唯一解释。

背景:安装程序是使用 Inno Setup (Unicode) 创建的。我在 Delphi 中创建了一个应用程序,以便在安装完成时向用户显示一个界面,因为大多数原始安装程序只是显示一个空白的无响应页面,上面写着“正在准备安装...”。这个 Delphi 应用程序在一个线程内执行实际的安装过程,该线程使用事件来更新用户可见的网格。此事件驱动线程将每个安装步骤的进度报告回主窗体,并显示一个响应式用户界面,显示安装过程的每个步骤及其状态。然后,此应用程序将退出代码返回给安装程序以供进一步处理。

如果不是要求每个子进程等待并获取它们的退出代码,这将不是问题。但既然我需要这样做,Windows自然会将缓存的环境变量传递给每个子进程,仍然使它们无用。

如何强制我的应用程序查看自进程启动以来添加的新环境变量?

【问题讨论】:

  • @SomeKittensUx2666 建议的重复与使用命令提示符有关,答案无用。
  • 您如何从安装程序安装 node.js?您是链接 node.js MSI,还是自己直接分发 .exe?
  • @Chris 我正在链接 MSI,并且此应用程序中的每一步都返回一个退出代码以监控成功。我在 Delphi 应用程序的一个线程中执行此操作,该应用程序以表格形式向用户显示网格,以查看每个步骤的进度,更新状态。然后从 Inno Setup 安装程序调用 Delphi 应用程序,该安装程序传递退出代码,并且每个外部调用在继续之前等待结果。
  • 编辑了我的问题来解释。不幸的是,似乎唯一的解决方案是要求我的应用程序运行两次,需要重新启动,或者经历大量的混乱,创建多个 EXE 来处理不同的安装步骤。

标签: node.js environment-variables npm shellexecute


【解决方案1】:

无需重新启动应用程序的解决方案是将完整路径传递给nodejs 程序文件文件夹中的npm 命令。这样您就不需要依赖 Windows 及其环境变量 - 这是一条直接路径。记下您安装的是 32 位还是 64 位版本的 Node.js,并确保查看相应的文件夹...

C:\Program Files\nodejs\npm
C:\Program Files (x86)\nodejs\npm

【讨论】:

  • 请注意,使用 PATH 环境变量,您将始终从 32 位安装程序获得 32 位路径。
猜你喜欢
  • 2016-05-16
  • 1970-01-01
  • 2018-02-16
  • 2017-02-04
  • 2012-12-07
  • 1970-01-01
相关资源
最近更新 更多