The%SystemRoot% переменная средысодержит путь к каталогу Windows. (например c:\windows
)
SystemRoot
не настроен в Computer\HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Environment
, онавтоматическинабор.
Обычно в Windows 10 этот каталог располагается C:\Windows
на диске NTFS.
После того, как скрипт test(*) дал сбой, мы заметили:
- С той же версией ОС Windows 10 (LTSC 1809 17763.3887)
- Некоторые ящики используют
%SystemRoot% == C:\WINDOWS
(все заглавные буквы, несмотря на то, что каталог на диске —C:\Windows
) - Некоторые коробки используют
%SystemRoot% == C:\Windows
(в случае каталога на диске) - Мы перепроверили с помощью ProcessExplorer: разница в регистре уже присутствует в блоке окружения процесса
wininit.exe
, поэтому она нигде не переопределена.
В:
Является ли основой для значения SystemRoot
read какой-либо конкретный раздел реестра?
Чем можно объяснить эту разницу?
(*): Если говорить точнее, тест в любом случае оказался неработоспособным — не полагайтесь на регистр путей в Windows.
решение1
Он устанавливается в процессе загрузки. Он не устанавливается в реестре, поскольку процесс загрузки ОС должен знать, где найти файлы реестра (и другие файлы ОС), прежде чем он сможет прочитать их из реестра.
https://learn.microsoft.com/en-us/windows-hardware/drivers/devtest/boot-options-in-windows
Параметры загрузки Windows хранятся в хранилище данных конфигурации загрузки (BCD) на компьютерах с BIOS и EFI.
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.