关于Windows,系统变量和环境变量有什么区别?

5

在Windows上定义环境变量有两种方法。我看到过使用“系统”变量和仅使用“环境”变量的示例。使用其中一种方法与另一种方法相比有何区别和影响?


1
他们可能都在指称同一件事情:环境变量,但是Windows有“全局”和“用户”环境变量。全局变量对所有用户账户可用,用户变量仅对特定用户可用。 - Marc B
你是在谈论Java中的“环境变量”,对吗?https://dev59.com/aHE85IYBdhLWcg3wQxPG - Matt Ball
我发布了这个问题,并附上了我的答案,因为它最初让我感到困惑,我的答案可能会帮助其他有同样困惑的人。 - thejartender
关于“仅仅是环境变量”: 它不是"用户"环境变量吗?(“用户变量”)? - Peter Mortensen
3个回答

5

像%SystemRoot%和%WinDir%这样的变量只是普通的环境变量。唯一的区别在于它们的值来自哪里:

  • 系统环境变量是预定义的,并由安装程序确定。此Technet文章中的“使用Cmd.exe与环境变量”部分列出了它们的名称,请注意它已过时并且不包括64位特定变量
  • 在HKEY_LOCAL_MACHINE \ SYSTEM \ CurrentControlSet \ Control \ Session Manager \ Environment注册表键中定义的可配置系统范围环境变量,适用于任何用户。
  • 在HKEY_CURRENT_USER \ Environment注册表键中定义的可配置用户特定环境变量。

有效的进程环境是这三个来源的合并。

后两个注册表键可以从控制面板+系统小应用程序中的环境变量按钮进行编辑。请注意,使更改生效可能需要注销+登录,以便该进程从其父进程继承而来的环境的新副本开始,而不是旧的副本。


3
环境变量按以下顺序进行“评估”(即它们被归属):
系统变量 在autoexec.bat中定义的变量 用户变量 每个进程都有一个环境块,其中包含一组环境变量及其值。有两种类型的环境变量:用户环境变量(为每个用户设置)和系统环境变量(为所有人设置)。默认情况下,子进程继承其父进程的环境变量。
由命令处理器启动的程序继承命令处理器的环境变量。
环境变量指定文件的搜索路径、临时文件的目录、应用程序特定选项以及其他类似信息。系统为每个用户维护一个环境块和一个计算机环境块。系统环境块表示特定计算机所有用户的环境变量。用户的环境块表示系统为该特定用户维护的环境变量,包括一组系统环境变量。

2

我的理解是,“system”选项只对管理员账户可用。 选择此选项将为所有用户提供变量值。 非管理员用户的环境变量可以使用自己想要的值来覆盖变量值。 这第二个选项不会对系统中的其他账户产生影响。

定义系统变量需要重启系统才能更新您的系统。 如果使用命令提示符和环境选项,您只需要一个新的提示符即可使用您定义的变量。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接