Dlaczego zmiany w mojej ŚCIEŻCE nie są rozpoznawane?

36

Gdy aktualizuję moją ŚCIEŻKĘ za pomocą wbudowanego okna dialogowego Zmienne środowiskowe lub czegoś takiego jak Edytor ścieżki , a następnie otwieram wiersz polecenia, zmiany w mojej ŚCIEŻCE nie zostaną zarejestrowane w konsoli, w zależności od tego, gdzie wiersz polecenia był zaczęło się od.

Na przykład, jeśli edytuję ŚCIEŻKĘ, a następnie uruchamiam cmd.exe z menu Start lub skrót na pulpicie, to moja ŚCIEŻKA wygląda dobrze: została pomyślnie zaktualizowana; Jeśli jednak uruchomię program cmd.exe ze skrótu w innym miejscu niż Menu Start lub Pulpit, nowa ŚCIEŻKA nie zostanie odczytana i zamiast tego otrzymam starą ścieżkę. To jest bardzo dziwne.

Próbowałem uruchomić wiersz polecenia ze skrótu na pulpicie i działa dobrze; Następnie kopiuję ten sam skrót do podfolderu na pulpicie i otrzymuję problem nieaktualności PATH.

Zdaję sobie sprawę, że trudno to wyjaśnić, dlatego stworzyłem screencast, aby pokazać ten problem w działaniu .

Oto zrzut ekranu skrótu wiersza polecenia, jak widać na zrzucie ekranu:

Ustawienia skrótów wiersza poleceń

Dotyczy to Windows Vista Home Premium SP2.

Charles Roper
źródło

Odpowiedzi:

30

Po uruchomieniu nowego procesu (np. Nowego wiersza polecenia) pobierze on zmienne środowiskowe z procesu, który go uruchamia. Gdy ścieżka jest aktualizowana, tylko proces przeprowadzający aktualizację może wiedzieć, że się zmieniła, a ustawienie nie propaguje się, dopóki nie zalogujesz się ponownie (w przypadku ustawień dla poszczególnych użytkowników) lub nie uruchomisz ponownie (w przypadku ustawień ogólnosystemowych)

Rowland Shaw
źródło
2
Jednak główny explorerproces wykryje zmiany środowiska w rejestrze (należy do okna dialogowego rundll32) i automatycznie zaktualizuje własne środowisko. (Przynajmniej w XP to robi.) Dlatego zmiany są widoczne, gdy zaczynasz cmdod skrótu.
grawitacja
Rowland, dostarczyłem mi wystarczających informacji, aby dokładnie ustalić, dlaczego tak się dzieje, chociaż nie odpowiedziałem całkowicie na moje pytanie. Zobacz moją własną odpowiedź, aby poznać szczegóły. Dzięki!
Charles Roper
Dzięki za tę odpowiedź! Wszystko, co musiałem zrobić, to zamknąć wiersz polecenia i otworzyć go ponownie.
user1477388
To było dla mnie rozwiązanie! Korzystam z Git Bash dla Windows w otulinie Multitab (ConEmu) i zastanawiałem się, dlaczego echo $PATHnie działa. Zakładałem, że będzie świeży, ale nie wyszło, dopóki nie zamknąłem wszystkich kart Git Bash i ConEmu.
Oliv Utilo,
27

Jak sugeruje Rowland, rozpoczynając nowy proces, odczyta zmienne środowiskowe z procesu, który go uruchamia. Dlatego podczas uruchamiania wiersza polecenia z menu Start lub pulpitu odczytuje zmienne środowiskowe, z explorer.exektórych, jak sugeruje grawitacja, wykrywa zmiany w ustawieniach środowiska w rejestrze i dlatego widzę moją nową ŚCIEŻKĘ w wierszach poleceń uruchamianych z Pulpit lub menu Start.

Powodem nie widzę aktualizacje do mojego ścieżka w screencast napisałem to dlatego, że początkowo rozpoczęła oknie Eksploratora użyciu Farr dokonywania FindAndRunRobot.exeprocesu macierzystego. FARR nie wykrywa automatycznie zmian środowiska, więc odrodzone z niego procesy potomne nie pobierają nowej ŚCIEŻKI. Miałem także opcję „ Uruchom okna folderów w oddzielnym procesie ” w Eksploratorze, co oznacza, że wszystkie okna explorer.exe otworzyłem po pierwszym otworzonym przez FARR, w którym również dzieci FARR .

Wyłączając opcję „ Uruchamiaj okna folderów w osobnym procesie ”, nowe explorer.exeprocesy nie są tworzone w FARR, co rozwiązuje mój problem. Jednak uruchamiam również okna konsoli i inne rzeczy bezpośrednio z FARR; te również uzyskują stare ustawienia środowiska. Jeśli zrestartuję FARR, wówczas nowe ustawienia środowiska są propagowane.

Oto zrzut ekranu Process Explorer pokazujący procesy odradzane z FARR. Żaden z tych procesów nie otrzymuje nowych ustawień środowiska z najwyższego poziomu, explorer.exechyba że zrestartuję FARR:

eksplorator procesów

Charles Roper
źródło
3
Dlaczego moja odpowiedź została odrzucona? Jeśli jest w nim jakaś wada, daj mi znać, a spróbuję to naprawić.
Charles Roper
ma wielki sens.
lwpro2