【问题标题】:Adding to the PATH on Windows in node.js - sending WM_SETTINGCHANGE?在 node.js 中添加到 Windows 上的 PATH - 发送 WM_SETTINGCHANGE?
【发布时间】:2017-03-01 20:02:53
【问题描述】:

我正在编写一个安装脚本(在 node.js 中,特别是 slush/gulp,尽管我认为这并不重要),它在我们的开发人员机器上设置了一些常用工具。

对于这些工具之一,我需要修改 Windows 机器上的 PATH 环境变量。

到目前为止,我发现最好的方法是使用 winreg 包直接修改注册表(在 HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\Environment\Path 中),效果很好(除了需要在提升的命令提示符)。

但是,它需要重新启动计算机才能使新的 PATH 生效(甚至不像通常那样只打开一个新的命令提示符),或者将用户发送到他们的系统首选项以打开环境变量对话框框,然后单击“确定”。

This detailed answer 涵盖了当您以编程方式更改环境变量时需要在后台发生的一些事情。我假设在该环境变量对话框中单击“确定”时,WM_SETTINGCHANGE 消息 (details here) 已发送到系统。

那么,我该如何从 node.js 发送 WM_SETTINGCHANGE 消息?这可能吗?

【问题讨论】:

    标签: node.js windows path environment-variables


    【解决方案1】:

    我可以提供非本地解决方案(不确定本地是否存在)。它为我更新了值而无需重新启动。

    我说的是至少从 Windows XP 开始随 Windows 一起提供的 reg.exe 工具。

    算法:

    1。形成更新命令,例如:

    const scriptContent = `REG ADD HKCU\\Environment /v Path /t REG_SZ /d "${newPath}" /f`
    • HKCU\Environment - 是注册表中变量的路径,
    • 路径 - 要更新的变量的名称,
    • REG_SZ - 变量的类型,
    • "${newPath}" - 新的 PATH 内容(添加了新路径的完全旧内容。使用引号以防我们有空格),
    • /f - 强制重写(基本上,此命令用于创建。因此,如果此变量不存在,则将创建它,否则 - 覆盖)。

    2。将此内容写入脚本文件,例如script.bat

    const fs = require("fs");
    const scriptPath = 'script.bat';
    fs.writeFile(scriptPath, scriptContent);

    3。执行脚本文件:

    const child_process = require("child_process");
    child_process.exec(scriptPath);

    【讨论】:

      猜你喜欢
      • 2011-09-13
      • 2018-12-24
      • 1970-01-01
      • 2015-01-12
      • 2012-01-23
      • 2012-06-25
      • 2014-07-14
      • 2010-10-30
      • 1970-01-01
      相关资源
      最近更新 更多