为什么当我们从不同位置打开命令提示符时 PATH 环境变量值会不同?

为什么当我们从不同位置打开命令提示符时 PATH 环境变量值会不同?

我有一个软件包,它在安装和卸载过程中分别向 PATH 环境变量添加和删除条目(例如C:\my_entry)。我可以通过验证注册表项来查看该条目是否被添加到 PATH 变量或从 PATH 变量中删除

HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\Environment\Path

但是我从命令提示符中观察到 PATH 环境变量的不同值。

安装后

⊞ Win如果我以+形式打开命令提示符,然后R键入,我就能在 PATH 变量中看到。cmdEnterC:\my_entry

如果我从目录打开命令提示符(cmd.exe)C:\Windows\System32,则无法C:\my_entry进入 PATH 变量。

卸载后

⊞ Win如果我以+形式打开命令提示符R,输入cmd,然后Enter,我仍然能够C:\my_entry在 PATH 变量中看到它,尽管它已从注册表中删除。

请告诉我为什么如果我们从不同位置打开命令提示符,PATH 环境变量值会有所不同?为什么命令提示符中的 PATH 环境变量值与注册表中的值不同?

答案1

环境变量通常遗传– 新进程从启动它的任何进程获取副本,不是从注册表中。(ProcExp 或 Process Hacker 可以显示每个单独进程的环境以及实际的层次结构。)

仅当您登录时以及当某些程序(例如安装程序)告诉所有应用程序刷新其环境时才会读取注册表项。(通常只有 Explorer 会对该请求做出反应。)

因此,可能某个 Explorer 进程(处理任务栏 shell 的进程)在安装后刷新了其环境,但处理文件夹窗口的进程却没有。(或者您可能从第三方文件管理器运行了 cmd。)

相关内容