刷新环境变量


Answers:


4

这实际上取决于环境变量的设置方式。例如,如果您在命令行中使用了“ SET”命令,则它只会影响当前实例。另一方面,诸如“ SETX”之类的命令将永久调整环境变量的值。SETX将确保所有将来的cmd实例都能看到更新。它不会影响本地环境。

如果环境变量是由另一个应用程序设置的并且未更新,则通常最简单的方法是重新启动“ explorer.exe”进程,注销并重新登录或重新启动。 本质上,您只需要告诉资源管理器重新加载环境变量即可。如果它是您开发的应用程序(例如安装程序),请确保正在调用SendMessage (HWND_BROADCAST, WM_SETTINGCHANGE, 0, (LPARAM)"Environment");。这告诉资源管理器刷新其环境变量的缓存。

这很重要,因为另一个进程启动的应用程序将从其父级继承其环境变量。这样,如果您从资源管理器启动cmd,则会在资源管理器看到变量时获得它们。


1

BartPE员工花费了大量时间在Windows中设置和撤消主环境。

主要环境存储在注册表中,但是资源管理器外壳将其读取到其地址。从这里将其发送到每个cmd.exe会话。

SET仅影响cmd环境。SETX允许您更改主环境,但设置不会反映在本地环境中。

弗兰克·韦斯特莱克(Frank Westlake)的CONSET和4NT可以从注册表中获取条目,但是对于主环境尤其没有任何开关。

通常加载的窗口会跟踪注册表设置,而通过minint(即WinPE)加载的窗口则不会。因此,设置注册表和读取注册表都可以,但是只有正常启动的窗口才能看到这些设置,并将它们传递给新的cmd.exe程序。


0

这取决于您在何处“设置”环境变量。相当于您的bash示例将是这样的:

文件:env.bat

set FOO=bar

现在您刷新它

% call env.bat

但是我认为您已经通过Windows-system-settings-dialog(或其他名称)完成了操作。结果是您实际上已经更改了注册表。启动新进程时,这些注册表设置将映射到进程中。

因此,您可以启动一个新进程(以您的情况为cmd.exe),也可以阅读反映所需更改的注册表项。您也可以编写一个.bat / .cmd脚本,该脚本从注册表中获取环境并更改当前的环境协议(如果心情不好,我将在午餐后进行此操作)。


0

现在,这非常容易,无需重新启动外壳程序:

  1. 打开开始菜单并搜索 RefreshEnv.bat
  2. RefreshEnv.bat

观察新添加的环境变量在任何新的Command / Powershell实例中均可用,并验证刷新。


你现在是什么意思 从哪个版本开始?Windows可以使用该bat文件吗?
MátéJuhász
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.