为什么我的 Windows 8 命令行不更新其路径

maw*_*sco 21 command-line environment-variables windows-8

我需要在我的 PATH 变量中添加一个新条目。这是我工作中的一项常见活动,但我最近开始使用 Windows 8。我认为该过程类似于 Windows 7、Vista、XP...

这是我的事件序列:

  1. 打开系统属性(开始-> [输入“控制面板”] -> 控制面板\系统和安全\系统 -> 高级系统设置 -> 环境变量)
  2. 将新路径添加到我的 USER PATH 变量的开头(C:\dev\Java\apache-ant-1.8.4\bin;)
  3. 打开命令提示符(开始 -> [键入“命令提示符”回车] -> [键入“路径”回车]

我的新路径条目不可用(见附图和视频)。我在 Windows 7 机器上复制了完全相同的过程并且它起作用了。

环境变量的屏幕截图

编辑

Windows 8 环境变量和命令提示符视频

编辑

这绝对不是 Windows 7 的行为。观看此视频以了解我期望在 Windows 7 中工作的行为。http://youtu.be/95JXY5X0fII

编辑 5/31/2013

因此,在经历了很多挫折之后,我编写了一个小型 C# 应用程序来测试该WM_SETTINGCHANGE事件。此代码在 Windows 7 和 Windows 8 中都接收事件。但是,在我的系统上的 Windows 8 中,我没有得到正确的路径;但是,我在 Windows 7 中这样做。这在其他 Windows 8 系统中无法重现。

这是 C# 代码。

using System;
using Microsoft.Win32;

public sealed class App
{
    static void Main()
    {
        SystemEvents.UserPreferenceChanging += new UserPreferenceChangingEventHandler(OnUserPreferenceChanging);

        Console.WriteLine("Waiting for system events.");
        Console.WriteLine("Press <Enter> to exit.");
        Console.ReadLine();
    }

    static void OnUserPreferenceChanging(object sender, UserPreferenceChangingEventArgs e)
    {
        Console.WriteLine("The user preference is changing. Category={0}", e.Category);
        Console.WriteLine("path={0}", System.Environment.GetEnvironmentVariable("PATH"));
    }
}
Run Code Online (Sandbox Code Playgroud)

OnUserPreferenceChanging 相当于 WM_SETTINGCHANGE

在 Windows 7 中运行的 C# 程序(您可以看到事件通过并选择了正确的路径)。

在Windows 8 中运行的C# 程序(可以看到事件通过,但路径错误)。

我的环境中有一些因素导致了这个问题。但是,这是 Windows 8 的错误吗?

编辑 2014-04-28

由于这个问题和其他几个问题,我们不再在桌面上使用 Windows 8。我们没有继续测试和试验这个问题的环境。对我们来说,这个问题仍然没有答案或解决方案。下面的答案没有解决我们的问题。

Dar*_*oid 7

如果您从开始菜单或任务栏上的快捷方式启动命令提示符,您必须:

  • 重新启动explorer。杀死它并重新启动它。
  • 注销并重新登录(有效地重新启动explorer)。
  • 重新启动系统(这也有效地重新启动explorer)。

环境不会立即更新,因为环境是从它们的父进程继承而来的,除了explorer,它在登录时由系统启动。这就是它在我的 Windows 7 系统上的表现。

因此,更改环境变量会更新注册表项,但在系统必须为某个正在启动的进程构建新的登录环境之前,不会重新读取这些项。大多数情况下,这不会发生,因为进程是已有环境的进程的子进程,因此环境是继承的。

  • 如果您使用系统属性对话框更改了环境变量,则更改会立即应用于当前运行的 Explorer 实例,之后启动的所有进程都会获得新环境。已经运行的进程不会自动更新它们的环境变量,除非它们处理 `WM_SETTINGCHANGE` 消息。 (5认同)
  • 对于 Windows 7 绝对错误。请参阅我在上面的帖子中链接的视频。 (2认同)