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


181

我想向Windows计算机(台式机或服务器)添加一个Environment变量,并且无需重启该计算机即可使用它。

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


2
我有同样的问题。我在某处读到,杀死explorer.exe进程会更新变量,并且可以正常工作。然后,我只需要从任务管理器中运行资源管理器。
user19694

1
您必须关闭命令提示符,然后再次将其重新打开,以更新路径变量。cmd启动时将加载变量。
NiLInfinite 2014年

Answers:


162

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

我不能从您的问题描述中看出您遇到的具体问题。您能告诉我们更多有关无法正常工作的特定情况的信息吗?

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


2
好的,我想我一定已经在正在运行的服务上看到了这种行为。我使用上述方法添加了一个新的环境变量。然后,在打开新的命令提示符并使用命令“ echo%<myvar>%。之后,我能够看到该值。谢谢你们的回答。”
Chad Braun-Duin

5
对于PowerShell用户,此代码段可能会有所帮助:poshcode.org/2049
Anders Zommarin 2011年

8
如果使用cmd,则在更改环境变量时需要重新启动它
Neil McGuigan 2012年

4
只是在我的PC上安装了Scala,但是PATH没有更新;大概MSI没有广播WM_SETTINGCHANGE消息。我添加了一个虚拟SYSTEM变量,即CHANGE_TO_UPDATE = z,我对其进行更新以触发WM_SETTINGCHANGE消息-问题已解决
Darren Bishop

3
链接的404 :-(
Samoth,

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

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

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


6
在此页面上的所有答案中,这是唯一真正为我工作的答案。谢谢!!
coredumperror

2
这对我有用。我认为问题在于,如果您通过资源管理器运行cmd(以节省输入长路径的麻烦),则即使关闭所有资源管理器窗口,资源管理器也不会关闭。感谢您的解决方案:)
Steve Mc

为我工作。您也可以只使用任务管理器杀死资源管理器任务并重新启动它(“文件”>“运行新任务”)。
adabyron

7
嗯 除非挂起了Windows资源管理器之一,否则请不要杀死它。相反,请打开“关闭窗口”对话框,并在按住时将其取消ctrl+alt+shift。这将干净地退出Windows资源管理器。在Vista +中,很难找到“关闭窗口”对话框(但至少在7之前仍然存在(不确定8和10)),因此有第二种方法。Ctrl + Shift +右键单击开始菜单的空白部分,然后选择退出浏览器。在8中,退出选项相同,但是您使用任务栏而不是开始菜单。
凯文·卡斯卡特

1
+1在Windows 7上非常有用。仅供参考,我只是使用CTRL + ALT + SHIFT,然后从Windows任务管理器中杀死了所有explorer.exe进程,然后通过单击“ 新建任务”按钮再次将其启动。
Marco Demaio '18

19

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


3
此问题影响所有服务,即使重新启动的服务也不会看到新的环境变量。
吉梅尔

1
您确定不是因为共享svchost进程吗?
Mark Sowul

16

尽管我没有足够的声誉来评论这个问题的最高投票答案,但我想指出这并不完全正确。我知道这一点是因为无论我在这篇文章中尝试了哪种解决方法,都没有任何实际效果。

答案中链接到kb文章实际上指出:

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

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

文章继续说:

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

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


1
这是唯一适合我的答案。其他任何方法,包括以硬性方式或“适当”方式杀死Explorer都没有任何不同。
Hashim

4

使环境。变量立即可用:

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上工作


3

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

如果这是一个已登录的用户,则它将正常工作。如果您使用的是当前用户帐户,则也可能需要重新启动explorer.exe。另请注意,以普通用户帐户运行服务可能会带来安全风险。


1

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

例如

setx PATH "%PATH%;c:\temp\my\new\path"

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

有关其他详细信息,请参见以下URL


不起作用:/“语法无效”
Joe DF

1
现在试试。显然,它需要双引号。
道格

谢谢,是的,我想...。除了收到截断警告,所以我无法添加它... :(
Joe DF
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.