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.
quelle
Antworten:
Gemäß dem MSKB-Artikel Umgebungsvariablen in Windows NT :
Eine bemerkenswerte Ausnahme ist die
PATH
Variable, die ein kombiniertes Ergebnis der System- und Benutzervariablen ist:Der Artikel beschreibt außerdem identisch Ausnahmen für den Ausbau der
LibPath
undOs2LibPath
Variablen sowie wie in den angegebenenautoexec.bat
behandelt werden . Diese Punkte dürften in den heutigen typischen Umgebungen wenig relevant sein.Gutschrift zu dieser SO Antwort
quelle
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.
Wenn Sie ein ausführbares Programm (oder ein ausführbares Skript, z. B. usw.) ausführen
.bat
,.vbs
müssen Sie nicht den vollständig qualifizierten Pfad angeben.Zum Ausführen
java
können Sie beispielsweise Folgendes eingeben: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 Namenjava.exe
. Es wird das allererste ausgeführt, das gefunden wird, und die Suche wird beendet. Wenn es zwei Dateien gibt, diejava.exe
irgendwo 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 sindjava.com
,java.exe
,java.bat
etc. 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:
Auf meinem Computer sind dies:
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.
quelle