Jak dodać zmienną środowiskową systemu Windows bez ponownego uruchamiania?

181

Chciałbym dodać zmienną środowiskową do komputera z systemem Windows (komputer lub serwer) i móc z niej korzystać bez ponownego uruchamiania tego komputera.

Załóżmy, że masz serwer produkcyjny, który obsługuje różne aplikacje, a nowa aplikacja wymaga do działania określonej zmiennej środowiskowej. Nie chcesz go ponownie uruchamiać, gdy użytkownicy są połączeni z innymi aplikacjami. Jakie masz możliwości? Nie podoba mi się opcja oczekiwania na ponowne uruchomienie komputera. Musi być lepszy sposób. czego mi brakuje?

Czad Braun-Duin
źródło
2
Miałem ten sam problem. Czytałem gdzieś, że zabicie procesu explorer.exe zaktualizuje zmienne i zadziałało. Potem musiałem uruchomić eksploratora z menedżera zadań.
user19694
1
Musisz zamknąć wiersz polecenia i otworzyć go ponownie, aby zmienne ścieżki zostały zaktualizowane. Zmienne są ładowane podczas uruchamiania cmd.
NiLInfinite,

Odpowiedzi:

162

Zmiany zmiennych środowiskowych powinny obowiązywać natychmiast, jeśli wprowadzisz je w głównym oknie dialogowym Właściwości dla danego komputera (przejdź do Mój komputer | Właściwości | Zaawansowane | Zmienne środowiskowe). Po zapisaniu zmian Eksplorator emituje WM_SETTINGCHANGEkomunikat do wszystkich okien, aby poinformować ich o zmianie. Wszelkie programy odradzające się po tym Eksploratorze powinny otrzymać zaktualizowane środowisko, chociaż już uruchomione programy nie, chyba że obsłużą komunikat zmiany ustawień.

Na podstawie opisu problemu nie jestem w stanie stwierdzić, jaki konkretnie masz problem. Czy możesz nam powiedzieć więcej o konkretnym scenariuszu, który nie działa?

Ten artykuł z bazy wiedzy może być także przydatny: Jak propagować zmienne środowiskowe do systemu

Charlie
źródło
2
Ok, chyba chyba widziałem takie zachowanie w uruchomionej usłudze lub coś takiego. Dodałem nową zmienną środowiskową przy użyciu metody opisanej powyżej. Potem byłem w stanie zobaczyć wartość po otwarciu nowego wiersza polecenia i użyciu polecenia „echo% <myvar>%. Dziękuję obojgu za odpowiedzi.
Chad Braun-Duin
5
Dla użytkowników PowerShell ten fragment może być pomocny: poshcode.org/2049
Anders Zommarin
8
Jeśli używasz cmd, musisz go zrestartować, jeśli zmienisz zmienną env
Neil McGuigan
4
Właśnie zainstalowałem Scalę na moim komputerze, ale PATH nie zaktualizował się; przypuszczalnie MSI nie nadał komunikatu WM_SETTINGCHANGE. Dodałem obojętną zmienną SYSTEM, tj. CHANGE_TO_UPDATE = z, którą aktualizuję, aby uruchomić komunikat WM_SETTINGCHANGE - problem rozwiązany
Darren Bishop
3
404 za link :-(
Samoth,
63
  1. W wierszu polecenia wpisz: runas /user:yourusername@yourdomain cmd
  2. Otworzy się nowy monit cmd, a następnie wpisz: taskkill /f /im explorer.exe
  3. Następnie wpisz: explorer.exe

Teraz po zamknięciu wszystkich wierszy poleceń zobaczysz, że PATHzmienna została naprawdę zaktualizowana.

Wszystkie monity poleceń muszą być zamknięte. Otwórz ponownie wiersz polecenia, wpisz ścieżkę, a zobaczysz nowe dane.

Ron AndKim Stengel
źródło
6
Ze wszystkich odpowiedzi na tej stronie jest to jedyna, która faktycznie dla mnie zadziałała. Dziękuję Ci!!
coredumperror
2
To zadziałało dla mnie. Myślę, że problem polega na tym, że jeśli uruchomisz cmd przez Eksploratora (aby uniknąć konieczności wpisywania długich ścieżek), Eksplorator nigdy nie zostanie zamknięty, nawet jeśli zamkniesz wszystkie okna Eksploratora. Dzięki za rozwiązanie :)
Steve Mc
Pracował dla mnie. Możesz także użyć Menedżera zadań, aby zabić zadania eksploratora i uruchomić je ponownie (Plik> Uruchom nowe zadanie).
adabyron
7
Uhh Nie zabijaj Eksploratora Windows, chyba że jeden z jego procesów zostanie zawieszony. Zamiast tego otwórz okno dialogowe zamykania systemu i anuluj je, przytrzymując ctrl+alt+shift. Spowoduje to czyste zamknięcie Eksploratora Windows. W systemie Vista + okno dialogowe zamykania systemu jest trudniejsze do znalezienia (ale nadal obecne, przynajmniej przez 7 (niepewne około 8 i 10)), więc istnieje druga metoda. ctrl + shift + kliknij prawym przyciskiem myszy pustą część menu startowego i wybierz opcję wyjdź z Eksploratora. W 8 opcja wyjścia jest taka sama, ale używasz paska zadań, a nie menu startowego.
Kevin Cathcart
1
+1 Działa to jak urok w Windows 7. FYI, po prostu użyłem CTRL + ALT + SHIFT i z Menedżera zadań Windows zabiłem cały proces explorer.exe, a następnie uruchomiłem go ponownie, naciskając przycisk Nowe zadanie .
Marco Demaio
19

Należy pamiętać, że wiele programów uzyskuje zmienne środowiskowe przy pierwszym uruchomieniu, więc chociaż system Windows może nie wymagać ponownego uruchomienia, niektóre programy mogą zanim będą mogły korzystać z nowych zmiennych. Dobrym przykładem tego jest konieczność otwarcia nowego okna wiersza polecenia po dodaniu ŚCIEŻKI (tak, byłem tym zaskoczony).

nedm
źródło
3
Problemy te dotyczą WSZYSTKICH USŁUG, nawet zrestartowana usługa nie zobaczy nowych zmiennych środowiskowych.
gimel
1
Czy na pewno nie dzieje się tak z powodu dzielenia się procesem svchost?
Mark Sowul
16

Chociaż nie mam wystarczającej reputacji, aby skomentować najwyższą głosowaną odpowiedź na to pytanie, chciałbym stwierdzić, że nie jest to dokładnie poprawne. Wiem o tym, ponieważ bez względu na obejście, którego próbowałem w tym poście, tak naprawdę nic nie działało.

Artykuł kb powiązany z tą odpowiedzią faktycznie stwierdza, że:

Należy jednak pamiętać, że modyfikacje zmiennych środowiskowych nie powodują natychmiastowych zmian. Na przykład, jeśli po wprowadzeniu zmian uruchomisz inny wiersz polecenia, zmienne środowiskowe będą odzwierciedlać poprzednie (nie bieżące) wartości. Zmiany zaczną obowiązywać dopiero po wylogowaniu, a następnie ponownym zalogowaniu.

Część dotycząca zmiennych środowiskowych przywracających poprzednie wartości po ponownym załadowaniu wiersza polecenia jest dokładnie tym, czego doświadczyłem w systemie Windows Server 2008.

Artykuł mówi dalej:

Aby wprowadzić te zmiany bez konieczności wylogowywania, wyślij komunikat WM_SETTINGCHANGE do wszystkich okien w systemie, aby wszystkie zainteresowane aplikacje (takie jak Eksplorator Windows, Menedżer programów, Menedżer zadań, Panel sterowania itp.) Mogły przeprowadzić aktualizację.

Nie oznacza to, że Explorer emituje komunikat WM_SETTINGCHANGE po zmianie zmiennych środowiskowych systemu lub że faktycznie działa. Nie jestem pewien, jak zrobiłbyś to, co sugeruje artykuł z bazy wiedzy (aby natychmiast propagować zmiany) z wiersza polecenia.

prace testowe
źródło
1
To jedyna odpowiednia dla mnie odpowiedź. Żadne z pozostałych, w tym zabijanie Eksploratora na ciężko lub „we właściwy sposób”, nie robi żadnej różnicy.
Hashim
4

Złóż środowisko zmienna dostępna od zaraz:

1. Open a shell

W zależności od zmiennej środowiskowej, którą chcesz zmienić, wykonaj następujące czynności: (załóżmy, że chcesz dodać nową ŚCIEŻKĘ dla ostatnio zainstalowanej aplikacji). W wierszu poleceń powłoki wpisz następujące polecenie:

2. PATH=%PATH%;C:\type\your\new\path\here

sprawdź, czy nowa ścieżka została dodana do zmiennej środowiskowej

3. echo %PATH%

Gotowy.

Udostępnij zmienną przy ponownym uruchomieniu

1. Press WinLogoKey+Pause/Break
2. On the left pane, press 'Advanced System Settings'
3. On the 'Advanced' tab, click 'Environment Variables'
4. In 'System Variables' choose the one you want to modify
5. Click Ok

Testowany i działający na systemie Windows 7/10

Pedro Sousa
źródło
3

Możliwym rozwiązaniem dla usług jest tymczasowe uruchomienie ich jako inny użytkownik (inny niż LocalSystem, LocalService, NetworkService). Na przykład w przypadku usługi Apache działa to bez żadnych problemów. Aby zmienić konto usługi otwórz konsolę services.msc, wybierz usługę, kliknij właściwości usługi, a na drugiej karcie wprowadź poświadczenia logowania dla użytkownika. Uruchom ponownie usługę, a jej zmienne środowiskowe powinny być aktualne.

Jeśli jest to użytkownik zalogowany, to powinno działać bez problemów. Jeśli używasz bieżącego konta użytkownika, konieczne może być również ponowne uruchomienie explorer.exe. Należy również pamiętać, że uruchamianie usług jako zwykłego konta użytkownika może powodować zagrożenia bezpieczeństwa.

Odyn
źródło
1

Ponieważ ludzie jeszcze nie dodali tej odpowiedzi, chciałem wspomnieć, że możesz ustawić stałe zmienne systemowe, które przetrwają restart przy pomocy polecenia SETX.

na przykład

setx PATH "%PATH%;c:\temp\my\new\path"

Pamiętaj, że powyższe nie będzie działać w bieżącym oknie poleceń i będzie wymagało otwarcia nowego okna poleceń, zanim zacznie obowiązywać. W rezultacie, w zależności od przypadku użycia; może być konieczne połączenie tego z jedną z powyższych technik.

Aby uzyskać dodatkowe informacje, zobacz następujący adres URL :

Doug
źródło
nie działa: / „nieprawidłowa składnia”
Joe DF
1
Spróbuj teraz. Najwyraźniej potrzebne były podwójne cudzysłowy.
Doug
Dzięki, tak, pomyślałem ... z wyjątkiem tego, że dostaję ostrzeżenie o obcięciu, więc nie mogę do tego dodać ... :(
Joe DF