我有一个软件包,它在安装和卸载过程中分别向 PATH 环境变量添加和删除条目(例如C:\my_entry
)。我可以通过验证注册表项来查看该条目是否被添加到 PATH 变量或从 PATH 变量中删除
HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\Environment\Path
但是我从命令提示符中观察到 PATH 环境变量的不同值。
安装后
⊞ Win如果我以+形式打开命令提示符,然后R键入,我就能在 PATH 变量中看到。cmd
EnterC:\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。)