这%SystemRoot% 环境变量包含 Windows 目录的路径。(例如c:\windows
)
SystemRoot
没有配置Computer\HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Environment
,它是自动地放。
C:\Windows
现在,通常在 Windows 10 上,此目录在 NTFS 磁盘上有大小写。
脚本测试(*)失败后,我们注意到:
- 使用相同操作系统版本 Windows 10 (LTSC 1809 17763.3887)
- 有些框使用
%SystemRoot% == C:\WINDOWS
(全部大写,尽管磁盘上的目录是C:\Windows
) - 有些盒子使用
%SystemRoot% == C:\Windows
(磁盘上的目录的情况) - 我们与 ProcessExplorer 进行了交叉检查:大小写差异已经存在于进程的环境块中
wininit.exe
,因此它不会在某处被覆盖。
问:
读取值的基础是否SystemRoot
来自任何特定的注册表项?
如何解释这种差异?
(*): 需要明确的是,测试无论如何都会失败——你不应该依赖 Windows 上的路径大小写。
答案1
它是在启动过程中设置的。它不是在注册表中设置的,因为操作系统启动过程需要知道在哪里找到注册表文件(和其他操作系统文件),然后才能从注册表中读取它们。
https://learn.microsoft.com/en-us/windows-hardware/drivers/devtest/boot-options-in-windows
Windows 启动选项存储在基于 BIOS 和基于 EFI 的计算机上的启动配置数据 (BCD) 存储中。
PS C:\> bcdedit.exe /enum | select-string "device|root"
device partition=\Device\HarddiskVolume1
device partition=C:
osdevice partition=C:
systemroot \WINDOWS
PS C:\> $env:systemroot
C:\WINDOWS
在较旧的 Windows 操作系统上,它可能位于 boot.ini 中