用户与系统环境变量:系统变量是否覆盖用户变量?


19

我拥有笔记本电脑的升级权限,但没有管理员权限。需要管理员权限才能修改系统环境变量。我希望如果创建的用户环境变量的名称与系统环境变量的名称相同,则该用户变量将覆盖系统变量,但事实并非如此。

添加与系统变量同名的用户变量后,我打开了一个全新的cmd窗口,并使用echo命令显示了该变量。它向我显示了系统变量的值,而不是用户变量的值。

我只是想确认这是预期的行为,并了解其背后的原因。我希望更具体的用户设置可以覆盖系统设置。

我有Windows 7。


更改变量时,通常必须完全重新启动Windows。在设置中更改变量不会更改正在运行的进程。新进程从正在运行的进程中复制环境(取决于它们的启动方式),因此仅启动一个进程并不意味着您会获得一个新的环境。
Zoredache

我重新启动,仍然从cmd.exe窗口运行“ echo%path%”时,它显示了我的系统环境变量,而不是用户变量的值。因此,我删除了User变量,o Admin访问权限,更改了System path变量,并且执行了相同的echo cmd。更新后的env值显示,没有重新启动。这告诉我USER变量不会覆盖系统变量,并且不需要重新启动。Neitehr是我所期望的。
乍得

使用什么过程来添加与系统变量同名的用户变量什么?
JosefZ

JosefZ:是的,我使用Windows 7 GUI(类似于您的链接中显示的屏幕)添加了两个环境变量,一个是USER,另一个是SYSTEM,它们都具有相同的名称。
乍得2015年

@Chad您接受的答案与您的经历完全相反吗?您如何解释差异?
RockPaperLizard's

Answers:


23

根据MSKB文章Windows NT中的环境变量

用户环境变量...优先于系统环境变量。

一个值得注意的例外是PATH变量,它是系统变量和用户变量的组合结果:

路径是从系统路径构建的,可以在“系统”对话框的“系统环境变量”字段中查看。用户路径被追加到系统路径。

本文还讨论了LibPathOs2LibPath变量扩展的相同异常,以及如何autoexec.bat处理中指定的异常。在当今的典型环境中,这些观点可能没有什么意义。

归功于这个答案


1
是否可以使用户路径在系统路径之前?
Qwerty

1

Twisty Impersonator回答中所说的一切都是正确的。附加了用户路径变量的想法已得到强调,我相信这种差异的后果需要进一步处理。

路径=%路径%(系统);%Path%(用户)

当你执行一个可执行程序(或任何可执行脚本,如.bat.vbs等),则无需提供完全合格的路径。

例如,要运行java,您可以输入以下任意一项:

C:/Program Files (x86)/Java/jre6/bin/java -version

java.exe -version

java -version

第一个示例使用完全限定的路径。这将始终在该确切路径上使用Java版本。

第二个示例将遍历%Path%环境变量中的每个目录,查找名为的可执行文件java.exe。它将运行找到的第一个,并停止搜索。如果在的java.exe某处有两个文件命名%Path%,则仅使用找到的第一个文件。

与第二个示例一样,第三个示例将迭代%Path%。中列出的目录。另外,由于未提供文件扩展名,因此可执行文件扩展名列表将按照%PATHEXT%环境变量中指定的顺序附加到文件名之后。如果有几个文件命名java.comjava.exejava.bat,等地方上%Path%,只找到了第一个被使用。

您可以通过创建以下批处理文件来查看系统上的可执行路径扩展名列表:

@echo off
echo %PATHEXT%
pause

在我的机器上,这些是:

.COM; .EXE; .BAT; .CMD; .VBS; .VBE; .JS; .JSE; .WSF; .WSH; .MSC;的.py

这是什么意思呢?

鲜明的对比到其他环境变量,用户路径不允许您覆盖系统路径。情况恰恰相反。在上面的示例中,在许多情况下您可能会更改Java的默认版本。但是,如果系统路径中已经列出了Java版本,则始终会首先找到该版本,因为从左到右依次搜索路径,并且在右侧附加了用户路径。 -左侧,系统路径在左侧。

我该怎么办?

如果您无权访问系统环境变量,则无法使用用户路径覆盖系统路径上的默认程序。(实际上,一定是这种方式,否则某些程序将无法正常运行,这将使您的系统容易受到恶意软件的篡改。没人希望那样。)

相反,如果必须使用特定版本,则必须使用标准路径。


1
是否可以使用户路径在系统路径之前?
Qwerty

1
对于另一个问题,这将是一个很好的话题。(在该网站上进行的快速搜索没有发现任何立即相关的内容。)请随时提出一个新问题,并在评论中在此发布链接!
JonathanDavidArndt,
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.