Odpowiedzi:
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.
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.
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).
Jest to teraz znacznie łatwiejsze, nie trzeba restartować powłoki:
RefreshEnv.bat
RefreshEnv.bat
Zauważ, że nowo dodane zmienne środowiskowe są dostępne w każdej nowej instancji Command / Powershell, weryfikując odświeżenie.