Wie legt Windows die Variable %SystemRoot% fest?

Wie legt Windows die Variable %SystemRoot% fest?

DerUmgebungsvariable %SystemRoot%enthält den Pfad zum Windows-Verzeichnis. (zB c:\windows)

SystemRootist 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 Festplatte C:\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.exeProzesses vorhanden und wird daher nicht irgendwo überschrieben.

Q:

Wird die Basis für den Wert SystemRootaus 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

verwandte Informationen