假设您有一个生产服务器,该服务器托管各种应用程序,而新应用程序需要运行特定的环境变量。当用户连接到其他应用程序时,您不想重新启动它。您有什么选择?我不喜欢等待直到良好的时间重新启动选项。肯定有更好的办法。我想念什么?
#1 楼
如果您通过相关计算机的“属性”主对话框进行更改,则对环境变量的更改应立即生效(转到“我的电脑” |“属性” |“高级” |“环境变量”)。保存更改后,资源管理器会向所有窗口广播WM_SETTINGCHANGE
消息,以将更改通知他们。在此之后通过资源管理器生成的任何程序都应该获得更新的环境,尽管已经运行的程序无法处理,除非它们处理设置更改消息。我无法从您的问题描述中看出具体的内容您遇到的问题。您能否告诉我们更多有关无法正常工作的特定方案的信息?
此知识库文章也可能有用:如何将环境变量传播到系统中
评论
好的,我想我一定已经在正在运行的服务上看到了这种行为。我使用上述方法添加了一个新的环境变量。然后,在打开一个新的命令提示符并使用命令“ echo%
–乍得·布劳恩·杜因(Chad Braun-Duin)
09年5月21日在1:09
对于PowerShell用户,此代码段可能会有所帮助:poshcode.org/2049
–安德斯(Anders Zommarin)
2011年10月12日下午6:32
如果使用cmd,则在更改环境变量时需要重新启动它
–尼尔·麦圭根(Neil McGuigan)
2012年12月13日下午5:08
只是在我的PC上安装了Scala,但PATH没有更新;大概MSI没有广播WM_SETTINGCHANGE消息。我添加了一个虚拟SYSTEM变量,即CHANGE_TO_UPDATE = z,我对其进行了更新以触发WM_SETTINGCHANGE消息-已解决问题
–达伦·毕晓普(Darren Bishop)
15年1月19日在10:12
链接404 :-(
–萨莫斯(Samoth)
19年4月12日在9:58
#2 楼
在命令提示符下键入:
runas /user:yourusername@yourdomain cmd
它将打开一个新的cmd提示符,然后键入:
taskkill /f /im explorer.exe
然后键入:
explorer.exe
现在,关闭所有命令提示符后,您将看到
PATH
变量已真正更新。必须关闭所有命令提示符。重新打开新的命令提示符,键入path,您将看到新数据。
评论
在此页面上的所有答案中,这是唯一真正为我工作的答案。谢谢!!
– coredumperror
2013年12月6日7:34
这对我有用。我认为问题在于,如果您通过资源管理器运行cmd(以节省输入长路径的麻烦),则即使关闭所有资源管理器窗口,资源管理器也不会关闭。感谢您的解决方案:)
–史蒂夫·麦克(Steve Mc)
2014-09-18 15:48
为我工作。您也可以只使用任务管理器杀死浏览器任务并重新启动它(“文件”>“运行新任务”)。
–阿达拜伦
15年1月22日在16:48
嗯除非挂起了Windows资源管理器的进程之一,否则请不要杀死它。而是打开关闭窗口对话框,并按住ctrl + alt + shift取消它。那将干净地退出Windows资源管理器。在Vista +中,很难找到“关闭窗口”对话框(但至少在7之前仍然存在(不确定大约8和10)),因此有第二种方法。 Ctrl + Shift +右键单击开始菜单的空白部分,然后选择退出浏览器。在8中,退出选项相同,但是您使用任务栏而不是开始菜单。
–凯文·卡斯卡特(Kevin Cathcart)
15年8月21日在20:14
+1这在Windows 7上非常有用。仅供参考,我只是使用CTRL + ALT + SHIFT,然后从Windows任务管理器中杀死了所有explorer.exe进程,然后通过单击“新建任务”按钮再次将其启动。
– Marco Demaio
18-11-29在15:25
#3 楼
要记住的一件事是,许多程序在首次启动时都会获取环境变量,因此,尽管Windows可能不需要重新启动,但某些程序可能需要先使用新变量。很好的例子是在添加PATH之后必须打开一个新的命令提示符窗口(是的,我为此而被绊倒了)。评论
此问题会影响所有服务,即使重新启动的服务也不会看到新的环境变量。
– gimel
09年5月16日在10:39
您确定不是因为共享svchost进程吗?
– Mark Sowul
13年11月26日在22:57
#4 楼
尽管我没有足够的声誉来评论对此问题的最高投票答案,但我想指出这并不完全正确。我知道这一点是因为,无论我在这篇文章中尝试了哪种解决方法,都没有任何实际效果。但是,请注意,修改环境变量不会导致立即更改。例如,如果您在进行更改后启动另一个Command提示符,则环境变量将
反映以前的(不是当前)值。在注销并重新登录之前,更改不会生效。
重新加载命令提示符后,有关环境变量重置为先前值的部分完全是正确的。我在Windows Server 2008中所经历的。
文章继续说:
要实现这些更改而不必注销,请将WM_SETTINGCHANGE消息广播到系统中的所有窗口,以便任何感兴趣的应用程序(例如Windows资源管理器,程序管理器,任务管理器,控制面板等)都可以执行更新。
意味着一旦更改了系统环境变量,Explorer就会广播WM_SETTINGCHANGE消息,或者它实际上可以工作。我不确定您将如何执行命令提示符下的知识库文章(建议立即传播更改)中的建议。
评论
这是唯一适合我的答案。其他任何方法,包括以硬性方式或“适当”方式杀死Explorer都没有任何不同。
–普罗米修斯
19年1月15日在19:33
#5 楼
使环境。变量立即可用: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上工作
#6 楼
服务的一种可能解决方案是以另一个用户(LocalSystem,LocalService,NetworkService除外)临时运行它们。例如,对于Apache服务,它可以正常工作。若要更改服务帐户,请打开services.msc控制台,选择“服务”,单击“服务属性”,然后在第二个选项卡上输入用户的登录凭据。重新启动该服务,并且其环境变量应该是最新的。如果这是已登录的用户,则该文件应该没有问题。如果您使用的是当前用户帐户,则也可能需要重新启动explorer.exe。另请注意,以普通用户帐户运行服务可能会带来安全风险。
#7 楼
由于人们尚未添加此答案,因此我想提一提,您可以设置永久的系统变量,这些变量可以在使用SETX命令重新启动后继续存在。例如
在当前的命令窗口中工作,并且需要您打开一个新的命令窗口才能生效。结果,取决于使用情况;您可能需要将其与以上其他技术之一结合使用。
请查看以下URL以获取更多详细信息:
评论
不起作用:/“语法无效”
–乔DF
19年3月28日在17:58
现在试试。显然,它需要双引号。
–道格
19 Mar 28 '19在19:53
谢谢,是的,我想...。除了我收到截断警告,所以我无法添加它... :(
–乔DF
19年3月28日在20:14
评论
我有同样的问题。我在某处读到,杀死explorer.exe进程会更新变量,并且可以正常工作。然后,我只需要从任务管理器中运行资源管理器。您必须关闭命令提示符,然后再次将其重新打开,以更新路径变量。 cmd启动时将加载变量。
使用任务管理器或资源管理器窗口打开新的cmd不起作用(至少在Win10中),但是使用开始菜单并键入cmd,然后检查变量是否起作用。
打开任务管理器,在其中找到Explorer进程,然后使用相应的上下文菜单项重新启动它。