npm在安装Node.js后立即失败
我正在开发一个安装程序,它可以自动安装Node.js,将节点应用程序提取到文件夹中,然后通过npm在安装Node.js后立即失败,node.js,environment-variables,npm,shellexecute,Node.js,Environment Variables,Npm,Shellexecute,我正在开发一个安装程序,它可以自动安装Node.js,将节点应用程序提取到文件夹中,然后通过npm install进行安装。但是,安装程序始终需要运行两次才能使npm正常工作。这正在安装到Windows上 在我的安装程序应用程序的生命周期内 如果尚未安装Node.js,则会安装它 在相同的过程中,执行后面的步骤,npm安装 如果Node.js在安装程序启动之前不存在,则说明npm不是有效命令时失败 如果安装程序启动时已安装Node.js,则安装会成功 我假设Node.js的安装创建了新的环境
npm install
进行安装。但是,安装程序始终需要运行两次才能使npm
正常工作。这正在安装到Windows上
在我的安装程序应用程序的生命周期内
- 如果尚未安装Node.js,则会安装它
- 在相同的过程中,执行后面的步骤,
npm安装
- 如果Node.js在安装程序启动之前不存在,则说明
不是有效命令时失败npm
- 如果安装程序启动时已安装Node.js,则安装会成功
Node.js
的安装创建了新的环境变量,但我的流程尚未获得这些新变量,直到流程重新启动。然后,第二次它可以看到这些变量。否则,在同一进程中,它无法找到npm
,因为它无法看到新的环境变量。至少这是我将问题缩小到的范围,也是我总是要运行安装程序两次的唯一解释
背景:安装程序是使用Inno设置(Unicode)创建的。我在Delphi中创建了一个应用程序,在安装过程中向用户显示一个界面,因为大多数原始安装程序只是显示一个空白的非响应页面,上面写着“准备安装…”。此Delphi应用程序在线程内执行实际安装过程,该线程使用事件更新用户可见的网格。此事件驱动线程将每个安装步骤的进度报告回主窗体,并显示一个响应用户界面,显示安装过程的每个步骤及其状态。然后,该应用程序将退出代码返回给安装程序,以便进一步处理
如果不是因为需要等待每个子进程并获取它们的退出代码,这不会是一个问题。但由于我需要这样做,Windows自然会将缓存的环境变量传递给每个子进程,仍然使它们变得无用
如何强制应用程序查看自进程启动以来添加的新环境变量?无需重新启动应用程序的解决方案是将完整路径传递到
nodejs
程序文件文件夹中的npm
命令。这样,您就不需要依赖Windows及其环境变量——这是一条直接的路线。请注意您安装的是Node.js的32位版本还是64位版本,并确保查看相应的文件夹
C:\Program Files\nodejs\npm
C:\Program Files (x86)\nodejs\npm
@SomeKittensUx2666的可能重复项建议的重复项与使用命令提示符有关,答案是无用的。您如何从安装程序安装node.js?你是在链接node.js MSI,还是自己直接分发.exe?@Chris我在链接MSI,这个应用程序中的每一步都会返回一个退出代码来监控成功。我在Delphi应用程序中的一个线程中执行此操作,该应用程序以表格形式向用户显示网格,以查看每个步骤的进度,更新状态。然后从Inno安装程序调用Delphi应用程序,该安装程序传递退出代码,每次外部调用都会等待结果,然后再继续。不幸的是,唯一的解决方案似乎是要么要求我的应用程序运行两次,要么重新启动,要么经历一大堆混乱,创建多个EXE来处理不同的安装步骤。请注意,使用
PATH
环境变量,您总是可以从32位安装程序获得32位路径。