我需要向 PATH 变量添加新条目。这是我工作中常见的活动,但我最近开始使用 Windows 8。我以为这个过程与 Windows 7、Vista、XP 类似...
以下是我的事件顺序:
- 打开系统属性(开始-> [类型“控制面板”] -> 控制面板\系统和安全\系统 -> 高级系统设置 -> 环境变量)
- 添加新路径至开始我的用户路径变量(C:\dev\Java\apache-ant-1.8.4\bin;)
- 打开命令提示符(开始 -> [键入“命令提示符”输入] -> [键入“路径”输入]
我的新路径条目不可用(见附图和视频)。我在 Windows 7 计算机上重复了完全相同的过程,并且成功了。
编辑
编辑
这绝对不是 Windows 7 的行为。观看此视频以了解该行为我预计在 Windows 7 中工作。http://youtu.be/95JXY5X0fII
编辑于 2013 年 5 月 31 日
因此,在经历了许多挫折之后,我编写了一个小型 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"));
}
}
OnUserPreferenceChanging
相当于 WM_SETTINGCHANGE
在 Windows 7 中运行的 C# 程序(您可以看到事件发生并且它选择了正确的路径)。
在 Windows 8 中运行的 C# 程序(您可以看到事件通过,但是路径错误)。
我的环境有些问题导致了这个问题。然而,这是 Windows 8 的一个错误吗?
编辑 2014-04-28
由于这个问题和其他几个问题,我们不再在桌面上使用 Windows 8。我们没有环境来继续测试和试验这个问题。我们仍然没有答案或解决方案来解决这个问题。下面的答案没有解决我们的问题。
答案1
如果您从开始菜单或任务栏上的快捷方式启动命令提示符,则必须:
- 重启
explorer
。关闭它然后重新启动。 - 注销并重新登录(有效重新启动
explorer
)。 - 重新启动系统(这也有效地重新启动
explorer
)。
环境不会立即更新,因为环境是从其父进程继承的,但 除外explorer
,它由系统在登录时启动。这就是它在我的 Windows 7 系统上的行为方式。
因此,更改环境变量会更新注册表项,但这些项不会被重新读取,直到系统必须为正在启动的某个进程构建新的登录环境。大多数情况下,这种情况不会发生,因为进程是已经具有环境的进程的子进程,因此环境是继承的。
答案2
从:http://support.microsoft.com/kb/104011通过https://serverfault.com/q/8855/158027
...
但请注意,对环境变量的修改不会导致立即更改。例如,如果您在进行更改后启动另一个命令提示符,则环境变量将反映以前的值(而不是当前值)。更改只有在您注销并重新登录后才会生效。
要在无需注销的情况下实现这些更改,请向系统中的所有窗口广播 WM_SETTINGCHANGE 消息,以便任何感兴趣的应用程序(例如 Windows 资源管理器、程序管理器、任务管理器、控制面板等)都可以执行更新。更多信息
例如,在基于 Windows NT 的系统上,以下代码片段应将更改传播到命令提示符中使用的环境变量:
SendMessageTimeout(HWND_BROADCAST, WM_SETTINGCHANGE, 0, (LPARAM) "Environment", SMTO_ABORTIFHUNG, 5000, &dwReturnValue);
Windows 95 和 Windows 98 附带的所有应用程序(包括 Windows 资源管理器和程序管理器)均不会响应此消息。因此,虽然从技术上讲,本文可以在 Windows 95 和 Windows 98 上实现,但除了通知第三方应用程序外,没有任何效果。在 Windows 95 上更改全局环境变量的唯一方法是修改 autoexec.bat 文件并重新启动。
答案3
问题出在您的用户设置上。在 Windows 8 中,每个用户都有自己的环境变量。
打开系统属性(开始-> [类型“控制面板”] -> 控制面板\系统和安全\系统 -> 高级系统设置 -> 环境变量)
上述方法将为 root 用户编辑环境变量,也许不是您当前的用户。
您应该进入用户帐户->选择您当前的帐户->更改环境变量
更改后,重新启动 power shell。然后
echo $env:JAVA_HOME
或者
Get-ChildItem env
希望对你有帮助。
答案4
如果您使用的是 Windows 8.1,请以管理员身份打开命令提示符,然后调用 PATH 命令,您应该会看到它出现在那里。当您返回正常 cmd 时,它也会出现。事实上,您应该能够从命令提示符启动添加的应用程序。