Benutzer- / Systemumgebungsvariablen: Überschreiben Systemvariablen Benutzervariablen?

21

Ich habe erhöhte Rechte an meinem Laptop, aber keine Administratorrechte. Zum Ändern von Systemumgebungsvariablen sind Administratorrechte erforderlich. Ich habe erwartet, dass, wenn ich eine Benutzerumgebungsvariable mit demselben Namen wie eine Systemumgebungsvariable erstellte, die Benutzervariable die Systemvariable überschreiben würde, aber dies scheint nicht der Fall zu sein.

Nachdem ich eine Benutzervariable mit dem gleichen Namen wie eine Systemvariable hinzugefügt hatte, öffnete ich ein brandneues cmd-Fenster und verwendete den Befehl echo , um die Variable anzuzeigen. Es zeigte mir den Wert der Systemvariablen anstelle des Werts der Benutzervariablen.

Ich wollte nur bestätigen, dass dies das erwartete Verhalten ist und die Gründe dafür verstehen. Ich würde erwarten, dass die spezifischere Benutzereinstellung das System überschreibt.

Ich habe Windows 7.

Tschad
quelle
Wenn Sie Variablen ändern, müssen Sie Windows häufig komplett neu starten. Durch Ändern einer Variablen in den Einstellungen werden laufende Prozesse nicht geändert. Neue Prozesse kopieren die Umgebung aus laufenden Prozessen (je nachdem, wie sie gestartet werden). Wenn Sie also einen Prozess starten, erhalten Sie keine neue Umgebung.
Zoredache
Ich wurde neu gestartet und wenn ich "echo% path%" in einem cmd.exe-Fenster ausführe, zeigt es meine System-Umgebungsvariable an, nicht den Wert der Benutzervariablen. Also habe ich die Benutzervariable gelöscht, den Administratorzugriff, meine Systempfadvariable geändert und das gleiche Echo-Cmd ausgeführt. Der aktualisierte Umgebungswert wurde ohne Neustart angezeigt. Dies sagt mir, dass USER-Vars System-Vars nicht überschreiben und ein Neustart nicht erforderlich ist. Neitehr ist das, was ich erwartet habe.
Chad
Wie wird verfahren, um eine Benutzervariable mit demselben Namen wie eine Systemvariable hinzuzufügen ? So etwas wie ?
JosefZ
JosefZ: Ja, ich habe die beiden Umgebungsvariablen USER und SYSTEM mit demselben Namen unter Verwendung der Windows 7-Benutzeroberfläche hinzugefügt, ähnlich den in Ihrem Link gezeigten Bildschirmen.
Chad
@Chad Ist die von Ihnen akzeptierte Antwort nicht genau das Gegenteil Ihrer Erfahrung? Wie erklären Sie die Diskrepanz?
RockPaperLizard

Antworten:

25

Gemäß dem MSKB-Artikel Umgebungsvariablen in Windows NT :

Benutzerumgebungsvariablen .... haben Vorrang vor Systemumgebungsvariablen.

Eine bemerkenswerte Ausnahme ist die PATHVariable, die ein kombiniertes Ergebnis der System- und Benutzervariablen ist:

Der Pfad wird aus dem Systempfad erstellt, der im Feld Systemumgebungsvariablen im Dialogfeld System angezeigt wird. Der Benutzerpfad wird an den Systempfad angehängt.

Der Artikel beschreibt außerdem identisch Ausnahmen für den Ausbau der LibPathund Os2LibPathVariablen sowie wie in den angegebenen autoexec.batbehandelt werden . Diese Punkte dürften in den heutigen typischen Umgebungen wenig relevant sein.

Gutschrift zu dieser SO Antwort

Ich sage Reinstate Monica
quelle
2
Kann der Benutzerpfad dem Systempfad vorangestellt werden?
Qwerty
3

Alles, was Twisty Impersonator in seiner Antwort sagte , ist richtig. Die Idee, dass die Benutzerpfadvariable angehängt wird, wurde hervorgehoben, und ich glaube, dass die Konsequenzen dieses Unterschieds eine zusätzliche Behandlung erfordern.

Pfad =% Pfad% (System); % Path% (Benutzer)

Wenn Sie ein ausführbares Programm (oder ein ausführbares Skript, z. B. usw.) ausführen .bat, .vbsmüssen Sie nicht den vollständig qualifizierten Pfad angeben.

Zum Ausführen javakönnen Sie beispielsweise Folgendes eingeben:

C:/Program Files (x86)/Java/jre6/bin/java -version

java.exe -version

java -version

Das erste Beispiel verwendet einen vollständig qualifizierten Pfad. Dabei wird immer die Java-Version verwendet, die genau diesem Pfad entspricht.

Das zweite Beispiel durchsucht jedes Verzeichnis in der %Path%Umgebungsvariablen nach einer ausführbaren Datei mit dem Namen java.exe. Es wird das allererste ausgeführt, das gefunden wird, und die Suche wird beendet. Wenn es zwei Dateien gibt, die java.exeirgendwo auf der benannt sind %Path%, wird nur die erste gefundene verwendet.

Das dritte Beispiel durchläuft wie das zweite die Verzeichnisse in der Liste %Path%. Da keine Dateierweiterung angegeben wurde, wird außerdem eine Liste der ausführbaren Dateierweiterungen in der in der %PATHEXT%Umgebungsvariablen angegebenen Reihenfolge an den Namen der Datei angehängt . Wenn es mehrere Dateien mit dem Namen sind java.com, java.exe, java.batetc. irgendwo auf der %Path%nur die erste gefundene verwendet wird.

Sie können die Liste der ausführbaren Pfaderweiterungen auf Ihrem System anzeigen, indem Sie die folgende Batchdatei erstellen:

@echo off
echo %PATHEXT%
pause

Auf meinem Computer sind dies:

.COM; .EXE; .BAT; .CMD; .VBS; .VBE; .JS; .JSE; .WSF; .WSH; .MSC; .PY

Was bedeutet das alles?

Im Gegensatz zu anderen Umgebungsvariablen können Sie mit dem Benutzerpfad den Systempfad nicht überschreiben. Das genaue Gegenteil ist der Fall. Anhand der obigen Beispiele kann es vorkommen, dass Sie die Standardversion von Java ändern müssen. Wenn jedoch bereits eine Java-Version im Systempfad aufgeführt ist, wird diese Version IMMER zuerst gefunden, da der Pfad in der angegebenen Reihenfolge von links nach rechts durchsucht und der Benutzerpfad rechts angehängt wird -hand side, mit dem Systempfad auf der linken Seite.

Was kann ich tun?

Wenn Sie keinen Zugriff auf Systemumgebungsvariablen haben, können Sie Standardprogramme im Systempfad nicht über den Benutzerpfad überschreiben. (In der Tat muss es so sein, oder bestimmte Programme würden nicht mehr richtig funktionieren, und es würde Ihr System für Manipulationen durch bösartige Software öffnen. Niemand will das.)

Stattdessen müssen Sie einen vollständig qualifizierten Pfad verwenden, wenn Sie eine bestimmte Version verwenden müssen.

JonathanDavidArndt
quelle
1
Kann der Benutzerpfad dem Systempfad vorangestellt werden?
Qwerty
1
Das wäre ein gutes Thema für eine andere Frage. (Eine schnelle Suche auf dieser Website ergab keine sofort relevanten Ergebnisse.) Sie können gerne eine neue Frage stellen und hier in den Kommentaren einen Link dazu posten!
JonathanDavidArndt