将目录添加到用户 PATH 不起作用?

将目录添加到用户 PATH 不起作用?

我刚刚在 Windows 系统上安装了 gvim(反正它在 C:\gvim 上)。然后我在用户 PATH 上添加了 C:\gvim\vim73\,而不是系统 PATH。之后,我尝试从命令提示符调用 vim。不行,没用。所以我将 gvim 目录从用户 PATH 移到系统 PATH。它确实起作用了。

我仍然很好奇,所以我做了一个“echo %PATH%”,结果是系统 PATH 中的所有内容。

我的理解是系统 PATH 的优先级高于用户 PATH,因此 Windows 首先会尝试搜索系统 PATH,然后再搜索用户 PATH。所以它应该可以工作,但实际上却不行。

答案1

当您修改注册表时,实际上并没有设置任何形式的环境变量。

环境变量不保存在注册表中。保存在注册表中的是模板,Windows Explorer 等程序在收到通知时会从中(重新)构建其环境变量。实际环境变量是每个进程的,存储在每个进程自己的地址空间中,最初从其父进程继承,之后可根据进程的意愿进行修改。Windows Explorer 等程序参与自愿协议,通过该协议,它们将重新读取模板并更新每个进程都有自己的环境每当Windows 消息广播到桌面上的所有(顶层)窗口。

许多 Win32 程序不参与此自愿协议微软的命令解释器就是这样一个程序。要修改正在运行的微软命令解释器进程中的环境变量,可以使用普通命令解释器命令用于修改环境变量,例如SETDPATHPATH。修改后的环境将被命令解释器生成的每个进程继承。

类似地,Windows 资源管理器进程中修改的环境仅由 Windows 资源管理器生成的进程继承它已收到消息并重新读取模板。已运行进程的环境变量不受其他进程对模板所做的修改的影响。他们自己的环境变量。已经运行Microsoft 命令解释器不会从更改之前产生它的 Windows 资源管理器进程中神奇地获得更改的环境。

其他命令解释器有所不同。 JP Software 的 TCC例如,它本身就参与了自愿协议。它将识别 Windows 消息,并从注册表中的模板更新自己的每个进程环境,当其“系统变更时更新环境”设置已启用。

相关内容