当我使用内置环境变量对话框或类似方法更新 PATH 时路径编辑器,然后打开命令提示符,对 PATH 的更改不会在控制台中注册,取决于命令提示符从哪里启动。
例如,如果我编辑 PATH,然后从“开始”菜单或桌面上的快捷方式启动 cmd.exe,则我的 PATH 看起来很好:它已成功更新;但是,如果我从任何地方的快捷方式启动 cmd.exe其他而不是开始菜单或桌面,新的 PATH 不会被读取,而是会读取旧路径。这很奇怪。
我尝试从桌面上的快捷方式运行命令提示符,它运行正常;然后我复制了完全相同的快捷方式到桌面上的子文件夹,并且我遇到了无法更新的 PATH 问题。
我意识到这很难解释,所以我创建了截屏视频展示此问题的实际效果。 网站已瘫痪。
以下是该截屏视频中命令提示符快捷方式的屏幕截图:
这是在 Windows Vista Home Premium SP2 上。
答案1
当您启动新进程(例如新的命令行)时,它将从启动它的进程中获取环境变量。路径更新后,只有执行更新的进程才能知道它已更改,并且设置不会传播,直到您重新登录(对于每个用户的设置)或重新启动(对于系统范围的设置)
答案2
正如 Rowland 所建议的,当启动一个新进程时,它将从启动它的进程中读取环境变量。因此,当从开始菜单或者桌面,它读取环境变量explorer.exe
,正如 grawity 所建议的那样,检测注册表中环境设置的更改,因此我在从桌面或开始菜单启动的命令提示符中看到了我的新 PATH。
我在发布的截屏视频中没有看到 PATH 的更新,原因是我最初使用法尔制作FindAndRunRobot.exe
父进程。FARR 不会自动检测环境变化,因此,从它产生的子进程不会获取新的 PATH。我也有'在单独的进程中启动文件夹窗口' 在 Explorer 中设置的选项意味着我打开的所有 explorer.exe 窗口都是 FARR 打开的第一个窗口之后打开的,其中也是 FARR 的子窗口。
通过关闭'在单独的进程中启动文件夹窗口' 选项,explorer.exe
不会在 FARR 下创建新进程,这解决了我的问题。但是,我还直接从 FARR 启动控制台窗口和其他东西;这些也获取旧的环境设置。如果我重新启动 FARR,则新的环境设置将被传播。
explorer.exe
以下是 Process Explorer 的屏幕截图,显示了从 FARR 生成的进程。除非我重新启动 FARR,否则这些进程都不会从顶层接收新的环境设置:
答案3
(2022)
如果您在 Windows 终端中,仅打开一个新选项卡是不够的 - 您需要重新启动 Windows 终端。
答案4
还要记住,元素的顺序可能会改变,所以也许存在变化,只是您没有注意到。