Bestimmte Variablen werden im Windows-Systemumgebungsvariablen-PATH nicht erweitert

Bestimmte Variablen werden im Windows-Systemumgebungsvariablen-PATH nicht erweitert

Aus irgendeinem Grund gibt es bestimmte Umgebungsvariablen, die nicht erweitert werden, wenn sie in der"WEG"Variable in den Systemvariablen.

Funktioniert beispielsweise %SystemRoot%einwandfrei, während %WinDir%dies nicht der Fall ist. %ProgramFiles%und %ProgramFiles(x86)%funktioniert auch nicht.

Natürlich ist mir klar, dass ich statt einer Variablen einfach den vollständigen Pfad verwenden könnte, aber darum geht es nicht.

Irgendwelche Ideen?

Hier ist ein Screenshot/Beispiel:

Bildbeschreibung hier eingeben

Antwort1

SystemRootwird wie erwartet erweitert, da es sich um eine Pseudo-/vordefinierte Umgebungsvariable handelt. WinDirist eine reguläre Umgebungsvariable und „konkurriert“ mit anderen wie PATHin der Initialisierungssequenz.

Am besten erklärt von Raymond Chen beiWindows Confidential: Die versteckten Variablen: "Das Einbetten einer Umgebungsvariable in eine andere ist lediglich eine Frage des richtigen operativen Timings". Weiteres Zitat:

So funktioniert der Umgebungsaufbau. Er läuft in etwa vier Schritten ab:

  • Zuerst erstellt das System einige vordefinierte maschinenweite Umgebungsvariablen wie SystemRoot und ALLUSERSPROFILE (aber nicht COMPUTERNAME oder ProgramFiles).
  • Zweitens werden Umgebungsvariablen aus dem Abschnitt „System“ des Dialogfelds „Umgebungsvariablen“ erstellt. Die Definitionen der Systemumgebungsvariablen können die Notation „%“ verwenden, um auf die im vorherigen Schritt erstellten vordefinierten Umgebungsvariablen zu verweisen. Sie können beispielsweise eine Systemumgebungsvariable auf %SystemDrive%\Extras festlegen. Nachdem die Systemumgebung abgeschlossen ist, beginnt Windows mit dem Erstellen der Benutzerumgebung.
  • Schritt drei besteht darin, vordefinierte benutzerspezifische Umgebungsvariablen wie USERPROFILE und APPDATA zu erstellen. Die mit COMPUTERNAME und ProgramFiles verbundenen Variablen werden hier ebenfalls erstellt, obwohl es sich technisch gesehen um Systemvariablen und nicht um benutzerspezifische Variablen handelt.
  • Schließlich erstellt das System die Umgebungsvariablen. Diese befinden sich im Abschnitt „Benutzer“ des Dialogfelds „Umgebungsvariablen“ und haben Zugriff auf alle in den ersten drei Schritten erstellten Variablen. Sie können also eine Benutzerumgebungsvariable auf %USERPROFILE%\Extras oder eine im zweiten Schritt festgelegte benutzerdefinierte Systemumgebungsvariable festlegen. Wenn eine Benutzerumgebungsvariable denselben Namen hat wie eine Systemumgebungsvariable, ersetzt der neue Wert den alten.

...

Ein Kunde hatte Schwierigkeiten, die Umgebungsvariable System PATH auf %APPDATA%;C:\Windows zu setzen. Er stellte fest, dass die endgültige Umgebung lediglich den angegebenen Pfad enthielt (Prozentzeichen und alles), anstatt ihn durch den Wert der Umgebungsvariable APPDATA zu ersetzen. Wenn Sie sich die zuvor beschriebene Abfolge der Vorgänge ansehen, ist klar, warum dies geschah. Er versuchte, eine Systemumgebungsvariable basierend auf einer Variable zu setzen, die noch nicht definiert war.

Die Lösung war einfach: Verschieben Sie die Bearbeitung des Pfads vom Listenfeld Systemumgebung in das Listenfeld Benutzerumgebung. Auf diese Weise wäre die Variable vorhanden, wenn die Umgebungsvariable %APPDATA% verwendet werden soll.

Ein einfaches Beispiel für mögliche „Race Conditions“ bei der Definition von Umgebungsvariablen auf der Grundlage anderer Variablen ist der Zirkelfall, bei dem zwei Systemvariablen wie folgt definiert werden:

bbb=%ccc%
ccc=%bbb%

Unter Windows 7 führt dies dazu, dass die Variablen wie folgt ausgewertet werden:

C:\etc>set
...
bbb=%ccc%
ccc=%ccc%

verwandte Informationen