Odśwież zmienną środowiskową

12

Jak mogę odświeżyć powłokę cmd systemu Windows po zmodyfikowaniu zmiennych środowiska?

tzn. w bash mogę po prostu zrobić „source ~ / .bashrc”

Don Ch
źródło
Na Stackoverflow jest dobra odpowiedź na to samo pytanie .
Hugh Allen,
Zamknij konsolę i otwórz nową.
Synetech

Odpowiedzi:

4

To zależy od sposobu ustawienia zmiennych środowiskowych. Jeśli na przykład użyłeś polecenia „SET” w wierszu poleceń, ma to wpływ tylko na bieżącą instancję. Z drugiej strony polecenia takie jak „SETX” na stałe dostosują wartość zmiennej środowiskowej. SETX zapewni, że wszystkie przyszłe wystąpienia cmd zobaczą aktualizację. Nie wpłynie to na środowisko lokalne.

Jeśli zmienna środowiskowa jest ustawiona przez inną aplikację i nie jest aktualizowana, często najłatwiej jest zrestartować proces „explorer.exe”, wylogować się i ponownie zalogować lub uruchomić ponownie. Zasadniczo wystarczy powiedzieć eksploratorowi, aby przeładował zmienne środowiskowe. Jeśli jest to aplikacja, którą opracowałeś, na przykład instalator, upewnij się, że dzwoni SendMessage (HWND_BROADCAST, WM_SETTINGCHANGE, 0, (LPARAM)"Environment");. Informuje to eksploratora o odświeżeniu pamięci podręcznej zmiennych środowiskowych.

Jest to ważne, ponieważ aplikacje uruchomione przez inny proces dziedziczą zmienne środowiskowe po rodzicach. W związku z tym, jeśli uruchomisz cmd z Eksploratora, otrzymasz zmienne tak, jak Eksplorator je zobaczy.

Chris Crutchfield
źródło
1

Konfigurowanie i przywracanie środowiska głównego w systemie Windows to coś, nad czym ludzie BartPE spędzili sporo czasu.

Główne środowisko jest przechowywane w rejestrze, ale powłoka eksploratora odczytuje to na swój adres. Stąd jest wysyłany do każdej sesji cmd.exe.

SET wpływa tylko na środowisko cmd. SETX pozwala zmienić środowisko główne, ale ustawienie nie jest odzwierciedlone w środowisku lokalnym.

CONSET i 4NT Franka Westlake'a mogą pobierać wpisy z rejestru, ale w szczególności żadnych przełączników dla środowiska głównego.

Normalnie załadowane okna śledzą ustawienia do rejestru, podczas gdy ten załadowany przez mininta (tj. WinPE) nie. Więc ustawienie rejestru i odczyt rejestru działa w obu przypadkach, ale tylko normalnie uruchomione okna zobaczą ustawienia i przekażą je do nowego programu cmd, exe.

wendy.krieger
źródło
0

zależy to od tego, gdzie „ustawisz” swoje zmienne środowiskowe. odpowiednik twojego przykładu bash byłby następujący:

plik: env.bat

set FOO=bar

a teraz go odświeżasz

% call env.bat

ale myślę, że zrobiłeś to za pomocą okna dialogowego system-system-ustawienia-okno (lub jakkolwiek się nazywa). w rezultacie zmieniłeś rejestr. te ustawienia rejestru są odwzorowywane na proces podczas uruchamiania nowego procesu.

więc możesz albo rozpocząć nowy proces (w twoim przypadku cmd.exe) LUB możesz odczytać klucze rejestru odzwierciedlające pożądane zmiany. możesz również napisać mały skrypt .bat / .cmd, który pobiera środowisko z rejestru i zmienia aktualne środowisko (jeśli nastrój mnie uderzy, zrobię to po obiedzie).

akira
źródło
0

Jest to teraz znacznie łatwiejsze, nie trzeba restartować powłoki:

  1. Otwórz menu Start i wyszukaj RefreshEnv.bat
  2. Biegać RefreshEnv.bat

Zauważ, że nowo dodane zmienne środowiskowe są dostępne w każdej nowej instancji Command / Powershell, weryfikując odświeżenie.

Lance McCarthy
źródło
Co masz na myśli? Od której wersji? Czy ten plik nietoperza jest dostępny w systemie Windows?
Máté Juhász