DerUmgebungsvariable %SystemRoot%enthält den Pfad zum Windows-Verzeichnis. (zB c:\windows
)
SystemRoot
ist nicht in konfiguriert Computer\HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Environment
, es istautomatischSatz.
Unter Windows 10 wird dieses Verzeichnis normalerweise in der Groß-/Kleinschreibung auf NTFS-Festplatten angegeben C:\Windows
.
Nachdem ein Skripttest(*) abgebrochen wurde, stellten wir Folgendes fest:
- Mit gleicher Betriebssystemversion Windows 10 (LTSC 1809 17763.3887)
- Einige Boxen verwenden
%SystemRoot% == C:\WINDOWS
(alles in Großbuchstaben, obwohl das Verzeichnis auf der FestplatteC:\Windows
) ist. - Einige Boxen verwenden
%SystemRoot% == C:\Windows
(im Fall von Verzeichnis auf der Festplatte) - Wir haben mit ProcessExplorer eine Gegenprüfung durchgeführt: Der Unterschied in der Groß- und Kleinschreibung ist bereits im Umgebungsblock des
wininit.exe
Prozesses vorhanden und wird daher nicht irgendwo überschrieben.
Q:
Wird die Basis für den Wert SystemRoot
aus einem bestimmten Registrierungsschlüssel gelesen?
Was könnte diesen Unterschied erklären?
(*): Um es klarzustellen, der Test war trotzdem fehlerhaft – du darfst dich unter Windows nicht auf die Groß-/Kleinschreibung von Pfaden verlassen.
Antwort1
Es wird beim Startvorgang festgelegt. Es wird nicht in der Registrierung festgelegt, da der Startvorgang des Betriebssystems wissen muss, wo die Registrierungsdateien (und andere Betriebssystemdateien) zu finden sind, bevor er sie aus der Registrierung lesen kann.
https://learn.microsoft.com/en-us/windows-hardware/drivers/devtest/boot-options-in-windows
Die Windows-Startoptionen werden auf BIOS- und EFI-basierten Computern im Boot Configuration Data (BCD)-Speicher gespeichert.
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
Bei älteren Windows-Betriebssystemen befindet es sich wahrscheinlich in boot.ini