为什么无法识别我的 PATH 更改?

Cha*_*per 44 windows windows-vista path command-line

当我使用内置的 Environment Variables 对话框或Path Editor 之类的东西更新我的 PATH ,然后打开命令提示符时,对我的 PATH 的更改将不会在控制台中注册,具体取决于命令提示符的位置从开始。

例如,如果我编辑我的 PATH,然后从开始菜单或桌面上的快捷方式启动 cmd.exe,那么我的 PATH 看起来不错:它已成功更新;但是,如果我从任何地方一个快捷方式启动CMD.EXE其他比开始菜单或桌面,在新的路径没有被读取,我得到的老路来代替。这很奇怪。

我试过从桌面上的快捷方式运行命令提示符,它工作正常;然后,我将完全相同的快捷方式复制到桌面上的子文件夹中,并且出现了非更新 PATH 问题。

我意识到这很难解释,所以我创建了一个截屏视频来展示这个问题

这是在该截屏视频中看到的命令提示符快捷方式的屏幕截图:

命令提示快捷方式设置

这是在 Windows Vista Home Premium SP2 上。

Row*_*haw 36

当您启动一个新进程(例如一个新的命令行)时,它将从启动它的进程中获取环境变量。更新路径后,只有执行更新的进程才能知道它已更改,并且设置不会传播,直到您重新登录(对于每用户设置)或重新启动(对于系统范围的设置)

  • 但是,主要的`explorer`进程会检测Registry中的环境变化(该对话框属于`rundll32`)并自动更新自己的环境。(至少在 XP 中是这样。)这就是为什么从快捷方式启动 `cmd` 时可以看到更改的原因。 (3认同)

Cha*_*per 31

正如 Rowland 建议的那样,当启动一个新进程时,它将从启动它的进程中读取环境变量。因此,当从Start MenuDesktop启动命令提示符时,它会读取环境变量explorer.exe,正如 grawity 所建议的那样,检测注册表中环境设置的更改,因此我在命令提示符中看到我的新 PATH 从桌面或开始菜单。

我在发布的截屏视频中没有看到我的 PATH 更新的原因是因为我最初使用FARR启动了一个资源管理器窗口,以创建FindAndRunRobot.exe父进程。FARR 不会自动检测环境变化,因此从它产生的子进程不会选择新的 PATH。我还在资源管理器中设置了“在单独的进程中启动文件夹窗口”选项,这意味着我在 FARR 打开的初始窗口之后打开的所有 explorer.exe 窗口也是 FARR 的子窗口

通过关闭“在单独的进程中启动文件夹窗口”选项,explorer.exe不会在 FARR 下创建新进程,这解决了我的问题。但是,我也直接从 FARR 启动控制台窗口和其他东西;这些也获得旧的环境设置。如果我重新启动 FARR,则会传播新的环境设置。

这是 Process Explorer 的屏幕截图,显示了从 FARR 产生的进程。explorer.exe除非我重新启动 FARR,否则这些进程都不会从顶层接收新的环境设置:

进程浏览器

  • 为什么我的回答被否决了?如果它有缺陷,请告诉我,我会尽力修复它。 (4认同)