我的 Windows XP SP3 的环境变量出现了奇怪的行为。
当我以管理员身份登录时,%SystemRoot%
PATH 中的字符串被替换为C:\WINDOWS
,变量“SystemRoot”的值为C:\WINDOWS
。
但是,当我以任何非管理员用户身份登录时,%SystemRoot%
尽管变量“SystemRoot”具有与管理员帐户相同的值,但实际上它仍保留在 PATH 中。
以普通用户身份运行 PowerShell:
PS C:\Users\vic> $env:path(进入)
%SystemRoot%\system32\WindowsPowerShell\v1.0\;C:\Program Files\AMD APP\bin\x86;C:\Windows\system32;C:\Windows;C:\Windows\System32\Wbem;C:\Windows\System32\WindowsPowerShell\v1.0;C:\Program Files\ATI Technologies\ATI.ACE\Core-Static
以提升的权限运行 PowerShell(我右键单击,run as admin
):
PS C:\Windows\system32> $env:路径
C:\Windows\system32\WindowsPowerShell\v1.0\;C:\Program Files\AMD APP\bin\x86;C:\Windows\system32;C:\Windows;C:\Windows\ System32\Wbem;C:\Windows\System32\WindowsPowerShell\v1.0;C:\Program Files\ATI Technologies\ATI.ACE\Core-Static
Windows 中的环境路径:
C:\Program Files\AMD APP\bin\x86;%SystemRoot%\system32;%SystemRoot%;%SystemRoot%\System32\Wbem;%SystemRoot%\System32\WindowsPowerShell\v1.0;C:\Program Files\ATI Technologies\ATI.ACE\Core-Static
为什么?
答案1
这可能与 Windows XP、Windows 7 和其他几个系统中的已知错误有关。(根据现有文档,它不会影响 Windows 8 或更高版本,或者在 Windows 8 或更高版本中未出现过。)
该错误记录在Microsoft 知识库文章 #329308(环境变量可能无法将 %APPDATA% 扩展至应用程序文件夹)。 它还被 NIST 国家漏洞数据库记录为中等漏洞,因为CVE-2007-6753. CVE 条目中引用的其中一条参考资料是ACROS 安全博客上的一篇文章,声称这个问题可能和 2003 年一样老了,甚至比 2003 年还要老。
尽管引用的知识库文章特别提到%APPDATA%
,但该错误会影响所有“变量内的变量”,并且当它出现在变量中时尤其会成为安全问题%PATH%
。
我不知道为什么提升权限会对这个错误的表达方式产生影响。根据我的经验,这个问题的重现通常相当不稳定。但变量内的变量没有得到适当扩展的一般情况是这是一个已知的错误,所以我不会花太多时间去尝试实际解决它。
我知道的唯一解决方法是编辑受影响的变量,以便明确定义路径,而不是依赖于其他变量。在 中看到“%SystemRoot%”的任何地方%PATH%
,将其替换为 的精确值%SystemRoot%
。尽可能对环境中的任何其他嵌套变量执行相同操作 - 尤其是当这些变量定义文件/文件夹路径时。