這%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 中