Warum werden Änderungen an meinem PFAD nicht erkannt?

36

Wenn ich meinen PATH aktualisieren entweder mit dem integrierten Dialogumgebungsvariablen oder so etwas wie Pfad - Editor , und dann eine Eingabeaufforderung öffnen, wird die Änderungen an meinen PATH nicht mit der Konsole registrieren, je nachdem , wo die Eingabeaufforderung war angefangen von.

Wenn ich zum Beispiel meinen PFAD bearbeite und dann cmd.exe über das Startmenü oder eine Verknüpfung auf dem Desktop starte, sieht mein PFAD gut aus: Er wurde erfolgreich aktualisiert. Wenn ich cmd.exe jedoch über eine andere Verknüpfung als das Startmenü oder den Desktop starte, wird der neue Pfad nicht gelesen und stattdessen der alte Pfad. Es ist sehr seltsam.

Ich habe versucht, die Eingabeaufforderung über eine Verknüpfung auf dem Desktop auszuführen, und es funktioniert einwandfrei. Ich kopiere dann genau diese Verknüpfung in einen Unterordner auf dem Desktop und bekomme das Problem, dass der Pfad nicht aktualisiert wird.

Mir ist klar, dass dies ziemlich schwer zu erklären ist, und deshalb habe ich einen Screencast erstellt, um dieses Problem in Aktion zu zeigen .

Hier ist ein Screenshot der Tastenkombination für die Eingabeaufforderung, die in diesem Screencast angezeigt wird:

Einstellungen für Eingabeaufforderungsverknüpfungen

Dies ist unter Windows Vista Home Premium SP2 der Fall.

Charles Roper
quelle

Antworten:

30

Wenn Sie einen neuen Prozess starten (z. B. eine neue Befehlszeile), werden die Umgebungsvariablen von dem Prozess abgerufen, der ihn startet. Wenn der Pfad aktualisiert wird, kann nur der Prozess, der die Aktualisierung durchführt, feststellen, dass er sich geändert hat, und die Einstellung wird erst weitergegeben, wenn Sie sich erneut anmelden (für benutzerspezifische Einstellungen) oder neu starten (für systemweite Einstellungen).

Rowland Shaw
quelle
2
Der Hauptprozess explorererkennt jedoch Umgebungsänderungen in der Registrierung (zu der das Dialogfeld gehört rundll32) und aktualisiert seine eigene Umgebung automatisch. (Zumindest in XP ist dies der Fall.) Aus diesem Grund sind Änderungen sichtbar, wenn Sie mit cmdeiner Verknüpfung beginnen.
Grawity
Rowland, dies lieferte mir genügend Informationen, um genau zu untersuchen, warum dies geschah, obwohl meine Frage nicht vollständig beantwortet wurde. Siehe meine eigene Antwort für Details. Vielen Dank!
Charles Roper
Danke für diese Antwort! Alles was ich tun musste, war meine Eingabeaufforderung zu schließen und sie erneut zu öffnen.
user1477388
Das war die Lösung für mich! Ich verwende Git Bash für Windows in einem Multitab-Wrapper (ConEmu) und frage mich, warum echo $PATHes nicht funktioniert. Ich nahm an, dass es frisch sein würde, kam aber nicht richtig heraus, bis ich alle Git Bash-Tabs und ConEmu geschlossen hatte.
Oliv Utilo
27

Wie Rowland vorschlägt, liest Rowland beim Starten eines neuen Prozesses die Umgebungsvariablen des Prozesses, der ihn startet. Wenn Sie eine Eingabeaufforderung über das Startmenü oder den Desktop starten , werden daher die Umgebungsvariablen gelesen, von explorer.exedenen aus, wie von Grawity vorgeschlagen, Änderungen an den Umgebungseinstellungen in der Registrierung festgestellt werden. Daher wird mein neuer PFAD in Eingabeaufforderungen angezeigt, die von der gestartet werden Desktop oder Startmenü.

Der Grund, warum ich in dem von mir geposteten Screencast keine Aktualisierungen meines PATH sehe, ist, dass ich ursprünglich ein Explorer-Fenster mit FARR gestartet habe , FindAndRunRobot.exedas den übergeordneten Prozess erstellt hat. FARR erkennt Änderungen in der Umgebung nicht automatisch, und aus dieser Umgebung stammende untergeordnete Prozesse erfassen den neuen PFAD nicht. Ich hatte auch die Option " Ordnerfenster in einem separaten Prozess starten" im Explorer eingestellt, was bedeutet, dass alle explorer.exe-Fenster, die ich nach dem ersten von FARR geöffneten Fenster geöffnet habe, auch Kinder von FARR .

Wenn Sie die Option " Ordnerfenster in einem separaten Prozessexplorer.exe starten" deaktivieren, werden unter FARR keine neuen Prozesse erstellt, was mein Problem löst. Ich starte jedoch auch Konsolenfenster und andere Dinge direkt von FARR aus. Diese erhalten auch die alten Umgebungseinstellungen. Wenn ich FARR neu starte, werden die neuen Umgebungseinstellungen übernommen.

Hier ist ein Screenshot von Process Explorer, der Prozesse zeigt, die von FARR erzeugt wurden. Keiner dieser Prozesse erhält die neuen Umgebungseinstellungen von der obersten Ebene, es explorer.exesei denn, ich starte FARR neu:

Process Explorer

Charles Roper
quelle
3
Warum wurde meine Antwort abgelehnt? Wenn es einen Fehler gibt, lassen Sie es mich wissen und ich werde versuchen, ihn zu beheben.
Charles Roper
Sinn machen.
lwpro2