npm在安装Node.js后立即失败

时间:2014-05-05 21:46:44

标签: node.js environment-variables npm shellexecute

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

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

  • 如果尚未安装Node.js,则会安装
  • 在同一过程中,稍后执行步骤npm install
  • 如果在安装程序启动之前Node.js尚不存在,则表示npm不是有效命令
  • 如果安装程序启动时已安装Node.js,则会成功

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

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

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

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

1 个答案:

答案 0 :(得分:0)

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

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