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


这可能是一个简单的答案,但我从来没有能够通过谷歌搜索找到它。我只是想将一个环境变量添加到Windows机器(桌面或服务器),并能够在不重启该机器的情况下使用它。

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


162
2018-05-16 04:09




我有同样的问题。我读到某个地方,杀死explorer.exe进程会更新变量并且它有效。然后我只需要从任务管理器运行资源管理器。 - user19694
您必须关闭命令提示符,然后重新打开它,以便更新路径变量。 cmd启动时会加载变量。 - NiLInfinite


答案:


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

我无法从您的问题描述中判断出您遇到的具体问题。您能否告诉我们更多有关不起作用的具体方案?

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


153
2018-05-16 04:16



好吧,我想我一定是在正在运行的服务上看到过这种行为。我使用上述方法添加了一个新的环境变量。然后,在打开一个新的命令提示符并使用命令“echo%<myvar>%”之后,我能够看到该值。感谢您的回答。 - Chad Braun-Duin
对于PowerShell用户,此代码段可能会有所帮助: poshcode.org/2049 - Anders Zommarin
如果使用cmd,则需要在更改env变量时重新启动它 - Neil McGuigan
刚在我的电脑上安装了Scala,但PATH没有更新;可能是MSI没有广播WM_SETTINGCHANGE消息。我添加了一个虚拟SYSTEM变量,即CHANGE_TO_UPDATE = z,我更新以触发WM_SETTINGCHANGE消息 - 问题解决了 - Darren Bishop
感谢CHANGE_TO_UPDATE = z,这正是我想要的解决方案。它对我有用,我没有重启。 - iopq


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

现在关闭所有命令提示后,你会看到 PATH 变量已经真正更新。

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


54
2018-03-20 06:36



在这个页面上的所有答案中,这是唯一一个真正适合我的答案。谢谢!! - CoreDumpError
+1 ....................... - Ijas Ameenudeen
这对我有用。我认为问题在于,如果您通过资源管理器运行cmd(为了节省您必须输入长路径),即使您关闭所有资源管理器窗口,资源管理器也永远不会关闭。谢谢你的解决方案:) - Steve Mc
为我工作。您也可以使用任务管理器终止资源管理器任务并重新启动它(文件>运行新任务)。 - adabyron
呃。除非其中一个进程挂起,否则请不要杀死Windows资源管理器。而是打开关闭窗口对话框并在按住时取消它 ctrl+alt+shift。这将彻底退出Windows资源管理器。在Vista +中,关闭窗口对话框很难找到(但仍然存在,至少到7(不确定大约8和10)),所以还有第二种方法。 ctrl + shift +右键单击开始菜单的空白部分,然后选择退出资源管理器。在8中,退出选项是相同的,但您使用任务栏而不是开始菜单。 - Kevin Cathcart


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


16
2018-05-16 06:11



此问题会影响所有服务,即使重新启动的服务也不会看到新的环境变量。 - gimel
你确定这不是因为共享一个svchost进程吗? - Mark Sowul


虽然我没有足够的声誉评论这个问题的最高投票答案,但我想说这不完全正确。我知道这一点,因为无论我在这篇文章中尝试过哪种解决方法,都没有实际工作。

kb文章链接到那个答案 实际上说:

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

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

文章接着说:

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

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


12
2017-11-26 22:30





制作环境。变量可立即获得:

1. Open a shell

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

2. PATH=%PATH%;C:\type\your\new\path\here

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

3. echo %PATH%

完成。

在重新启动时使变量可用

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

在Windows 7/10上测试并使用


4
2017-11-18 17:00





服务的可能解决方案是作为另一个用户(LocalSystem,LocalService,NetworkService除外)临时运行它们。例如,对于Apache服务,这没有任何问题。要更改服务帐户打开services.msc控制台,请选择服务,单击服务属性,然后在第二个选项卡上输入用户的登录凭据。重新启动服务,它的环境变量应该是最新的。

如果这是一个已记录的用户,则应该没有问题。如果您使用的是当前用户帐户,则可能还需要重新启动explorer.exe。另请注意,以普通用户帐户运行服务可能会产生安全风险。


3
2017-08-09 20:26