如何在不重新启动的情况下添加 Windows 环境变量?

Cha*_*uin 201 windows environment-variables

我想向 Windows 机器(台式机或服务器)添加一个环境变量,并且能够在不重新启动该机器的情况下使用它。

假设您有一个托管各种应用程序的生产服务器,并且一个新应用程序需要特定的环境变量才能运行。您不希望在用户连接到您的其他应用程序时重新启动它。你有哪些选择?我不喜欢等到好时机重启选项。一定会有更好的办法。我错过了什么?

Cha*_*lie 179

如果您通过相关计算机的主属性对话框进行更改(转到我的电脑 | 属性 | 高级 | 环境变量),则对环境变量的更改应立即生效。保存更改后,资源管理器会WM_SETTINGCHANGE向所有窗口广播一条消息,通知它们更改。在此之后通过资源管理器生成的任何程序都应该获得更新的环境,尽管已经运行的程序不会,除非它们处理设置更改消息。

我无法从您的问题描述中看出您遇到的具体问题。你能告诉我们更多关于不起作用的特定场景吗?

这篇知识库文章也可能有用:如何将环境变量传播到系统

  • 如果使用 cmd,如果更改 env 变量,则需要重新启动它 (9认同)
  • 对于 PowerShell 用户,此代码段可能会有所帮助:http://poshcode.org/2049 (5认同)
  • 404为链接:-( (5认同)
  • 刚刚在我的 PC 上安装了 Scala,但 PATH 没有更新;大概 MSI 没有广播 WM_SETTINGCHANGE 消息。我添加了一个虚拟系统变量,即 CHANGE_TO_UPDATE=z,我更新它以触发 WM_SETTINGCHANGE 消息 - 问题解决了 (4认同)
  • 好吧,我想我一定在正在运行的服务或其他东西上看到了这种行为。我使用上述方法添加了一个新的环境变量。然后,在打开新的命令提示符并使用命令“echo %<myvar>%”后,我能够看到该值。谢谢你们的回答。 (3认同)

小智 80

  1. 在命令提示符中键入: runas /user:yourusername@yourdomain cmd
  2. 它将打开一个新的 cmd 提示符,然后键入: taskkill /f /im explorer.exe
  3. 然后输入: explorer.exe

现在关闭所有命令提示符后,您将看到PATH变量已真正更新。

必须关闭所有命令提示符。重新打开一个新的命令提示符,输入 path ,您将看到新数据。

  • 呃。请不要杀死 Windows 资源管理器,除非它的进程之一被挂起。相反,打开关闭窗口对话框并在按住 `ctrl+alt+shift` 的同时取消它。这将干净地退出 Windows 资源管理器。在 Vista+ 中,关闭窗口对话框更难找到(但仍然存在,至少到 7(不确定 8 和 10)),所以有第二种方法。ctrl+shift+右键单击开始菜单的空白部分,然后选择退出资源管理器。在 8 中,退出选项是相同的,但您使用的是任务栏而不是开始菜单。 (8认同)
  • 在此页面上的所有答案中,这是唯一真正对我有用的答案。谢谢!! (6认同)
  • 这对我有用。我认为问题在于,如果您通过资源管理器运行 cmd(以节省您必须输入长路径),那么即使您关闭所有资源管理器窗口,资源管理器也永远不会关闭。感谢您的解决方案:) (2认同)

ned*_*edm 20

要记住的一件事是,许多程序在第一次启动时获取环境变量,因此虽然 Windows 可能不需要重新启动,但某些程序可能会在它们能够使用新变量之前。一个很好的例子是在添加 PATH 后必须打开一个新的命令提示符窗口(是的,我被这个绊倒了)。

  • 此问题会影响所有服务,即使重新启动的服务也不会看到新的环境变量。 (4认同)

小智 16

虽然我没有足够的声誉来评论这个问题的最高投票答案,但我想声明它并不完全正确。我知道这一点,因为无论我在这篇文章中尝试了哪种解决方法,都没有真正奏效。

答案中链接知识库文章实际上指出:

但是,请注意,对环境变量的修改不会立即导致更改。例如,如果您在进行更改后启动另一个命令提示符,则环境变量将反映以前(而不是当前)的值。直到您注销然后重新登录后,更改才会生效。

重新加载命令提示符后环境变量重置为以前的值的部分正是我在Windows Server 2008中遇到的。

文章接着说:

要在不注销的情况下实现这些更改,请向系统中的所有窗口广播 WM_SETTINGCHANGE 消息,以便任何感兴趣的应用程序(如 Windows 资源管理器、程序管理器、任务管理器、控制面板等)都可以执行更新。

这并不意味着一旦您更改了系统环境变量,Explorer 就会广播 WM_SETTINGCHANGE 消息,或者它确实有效。我不确定您将如何从命令提示符执行知识库文章中建议的操作(立即传播更改)。


Dou*_*oug 7

由于人们还没有添加这个答案,我想提一下,您可以使用命令设置SETX在重新启动后仍然存在的永久系统变量。

例如

setx PATH "%PATH%;c:\temp\my\new\path"
Run Code Online (Sandbox Code Playgroud)

请注意,上述命令在当前命令窗口中不起作用,需要您打开一个新的命令窗口才能生效。因此,取决于用例;您可能需要将其与上述其他技术之一结合起来。


Ped*_*usa 5

使环境。立即可用的变量:

1. Open a shell
Run Code Online (Sandbox Code Playgroud)

根据您要更改的环境变量,执行以下操作:(假设您要为最近安装的应用程序添加新的 PATH)因此,在 shell 提示符下,键入以下内容:

2. PATH=%PATH%;C:\type\your\new\path\here
Run Code Online (Sandbox Code Playgroud)

检查您的新路径是否已添加到环境变量中

3. echo %PATH%
Run Code Online (Sandbox Code Playgroud)

完毕。

使变量在重新启动时可用

1. Press WinLogoKey+Pause/Break
2. On the left pane, press 'Advanced System Settings'
3. On the 'Advanced' tab, click 'Environment Variables'
4. In 'System Variables' choose the one you want to modify
5. Click Ok
Run Code Online (Sandbox Code Playgroud)

在 Windows 7/10 上测试和工作