Wie fügt man eine Windows-Umgebungsvariable ohne Neustart hinzu?

181

Ich möchte einer Windows-Maschine (Desktop oder Server) eine Umgebungsvariable hinzufügen und diese verwenden, ohne die Maschine neu zu starten.

Angenommen, Sie haben einen Produktionsserver, der eine Vielzahl von Apps hostet, und eine neue App benötigt eine bestimmte Umgebungsvariable, um ausgeführt zu werden. Sie möchten es nicht neu starten, während Benutzer mit Ihren anderen Apps verbunden sind. Welche Möglichkeiten haben Sie? Ich mag es nicht, bis zum Neustart zu warten. Es muss einen besseren Weg geben. Was vermisse ich?

Chad Braun-Duin
quelle
2
Ich hatte das gleiche Problem. Ich habe irgendwo gelesen, dass das Beenden des explorer.exe-Prozesses die Variablen aktualisieren würde und es funktionierte. Dann musste ich einfach den Explorer über den Task-Manager ausführen.
user19694
1
Sie müssen die Eingabeaufforderung schließen und erneut öffnen, damit die Pfadvariablen aktualisiert werden. Die Variablen werden beim Start von cmd geladen.
NiLInfinite

Antworten:

162

Änderungen an Umgebungsvariablen werden sofort wirksam, wenn Sie die Änderung über das Hauptdialogfeld "Eigenschaften" für den betreffenden Computer vornehmen (gehen Sie zu "Arbeitsplatz" | "Eigenschaften" | "Erweitert" | "Umgebungsvariablen"). Nachdem die Änderungen gespeichert wurden, sendet der Explorer eine WM_SETTINGCHANGENachricht an alle Fenster, um sie über die Änderung zu informieren. Alle Programme, die danach über den Explorer gestartet werden, sollten die aktualisierte Umgebung erhalten, bereits ausgeführte Programme jedoch nicht, es sei denn, sie behandeln die Einstellungsänderungsnachricht.

Ich kann Ihrer Problembeschreibung nicht entnehmen, welches spezifische Problem Sie damit haben. Können Sie uns mehr über das spezielle Szenario erzählen, das nicht funktioniert?

Dieser KB-Artikel kann auch von Nutzen sein: Wie werden Umgebungsvariablen an das System weitergegeben?

Charlie
quelle
2
Ok, ich denke, ich muss dieses Verhalten bei einem laufenden Dienst oder so gesehen haben. Ich habe eine neue Umgebungsvariable mit der oben beschriebenen Methode hinzugefügt. Dann konnte ich den Wert sehen, nachdem ich eine neue Eingabeaufforderung geöffnet und den Befehl "echo% <myvar>%" verwendet hatte. Vielen Dank für Ihre Antworten.
Chad Braun-Duin
5
Für PowerShell-Benutzer kann dieses Snippet hilfreich sein: poshcode.org/2049
Anders Zommarin
8
Wenn Sie cmd verwenden, müssen Sie es neu starten, wenn Sie die Umgebungsvariable ändern
Neil McGuigan
4
Ich habe Scala gerade auf meinem PC installiert, aber der PATH wurde nicht aktualisiert. vermutlich hat die MSI die Meldung WM_SETTINGCHANGE nicht gesendet. Ich habe eine Dummy-SYSTEM-Variable hinzugefügt, dh CHANGE_TO_UPDATE = z, die ich aktualisiere, um die Meldung WM_SETTINGCHANGE auszulösen - Problem behoben
Darren Bishop
3
404 für den Link :-(
Samoth
63
  1. Geben Sie an einer Eingabeaufforderung Folgendes ein: runas /user:yourusername@yourdomain cmd
  2. Es öffnet sich eine neue cmd-Eingabeaufforderung, und geben Sie Folgendes ein: taskkill /f /im explorer.exe
  3. Dann tippe: explorer.exe

Nachdem Sie alle Eingabeaufforderungen geschlossen haben, sehen Sie, dass die PATHVariable wirklich aktualisiert wurde.

Alle Eingabeaufforderungen müssen geschlossen sein. Öffnen Sie eine neue Eingabeaufforderung und geben Sie path ein. Die neuen Daten werden angezeigt.

Ron AndKim Stengel
quelle
6
Von allen Antworten auf dieser Seite ist dies die einzige, die tatsächlich für mich funktioniert hat. Danke!!
Coredumperror
2
Das hat bei mir funktioniert. Ich denke, das Problem ist, dass, wenn Sie cmd über den Explorer ausführen (damit Sie keine langen Pfade eingeben müssen), der Explorer nie geschlossen wird, selbst wenn Sie alle Explorer-Fenster schließen. Vielen Dank für die Lösung :)
Steve Mc
Hat für mich gearbeitet. Sie können auch einfach den Task-Manager verwenden, um die Explorer-Aufgaben abzubrechen und neu zu starten (Datei> Neue Aufgabe ausführen).
Adabyron
7
Uhh. Bitte beenden Sie den Windows Explorer nur, wenn einer der Prozesse blockiert ist. Öffnen Sie stattdessen das Dialogfeld zum Herunterfahren von Fenstern und brechen Sie es ab, während Sie gedrückt halten ctrl+alt+shift. Damit wird Windows Explorer sauber beendet. In Vista + ist das Dialogfeld zum Herunterfahren von Windows schwerer zu finden (es ist jedoch immer noch vorhanden, mindestens bis 7 (unsicher, etwa 8 und 10)), sodass es eine zweite Methode gibt. Strg + Umschalt + Rechtsklick in einen leeren Teil des Startmenüs und wählen Sie Explorer beenden. In 8 ist die Option zum Beenden dieselbe, aber Sie verwenden die Taskleiste und nicht das Startmenü.
Kevin Cathcart
1
+1 Dies funktioniert unter Windows 7 wie ein Zauber. Zu Ihrer Information habe ich einfach die Tastenkombination STRG + ALT + UMSCHALT gedrückt und im Windows-Task-Manager den gesamten Prozess explorer.exe beendet und ihn dann erneut gestartet, indem ich auf die Schaltfläche Neue Aufgabe geklickt habe.
Marco Demaio
19

Beachten Sie, dass viele Programme die Umgebungsvariablen beim ersten Start erhalten. Während Windows möglicherweise keinen Neustart benötigt, können einige Programme die neuen Variablen möglicherweise erst verwenden. Ein gutes Beispiel hierfür ist das Öffnen eines neuen Eingabeaufforderungsfensters nach dem Hinzufügen eines PFADS (ja, ich bin dadurch gestolpert).

nedm
quelle
3
Dieses Problem betrifft ALLE DIENSTLEISTUNGEN. Auch für einen neu gestarteten Dienst werden keine neuen Umgebungsvariablen angezeigt.
Gimel
1
Sind Sie sicher, dass es nicht an der Freigabe eines Svchost-Prozesses liegt?
Mark Sowul
16

Obwohl ich nicht genug Reputation habe, um die am höchsten bewertete Antwort auf diese Frage zu kommentieren, möchte ich festhalten, dass sie nicht genau richtig ist. Ich weiß das, weil unabhängig davon, welche Problemumgehung ich in diesem Beitrag versucht habe, tatsächlich nichts funktioniert hat.

In dem in dieser Antwort verlinkten KB-Artikel heißt es tatsächlich:

Beachten Sie jedoch, dass Änderungen an den Umgebungsvariablen keine sofortige Änderung zur Folge haben. Wenn Sie beispielsweise eine andere Eingabeaufforderung starten, nachdem Sie die Änderungen vorgenommen haben, geben die Umgebungsvariablen die vorherigen (nicht die aktuellen) Werte wieder. Die Änderungen werden erst wirksam, wenn Sie sich abmelden und wieder anmelden.

Der Teil über die Umgebungsvariablen, die nach dem erneuten Laden der Eingabeaufforderung auf die vorherigen Werte zurückgesetzt werden, ist genau das, was ich in Windows Server 2008 erlebt habe.

In dem Artikel heißt es weiter:

Senden Sie eine WM_SETTINGCHANGE-Nachricht an alle Fenster im System, damit alle interessierten Anwendungen (z. B. Windows Explorer, Programm-Manager, Task-Manager, Systemsteuerung usw.) ein Update durchführen können, ohne sich abmelden zu müssen.

Dies bedeutet nicht, dass der Explorer eine WM_SETTINGCHANGE-Nachricht sendet, nachdem Sie die Systemumgebungsvariablen geändert haben oder dass sie tatsächlich funktioniert. Ich bin nicht sicher, wie Sie das tun würden, was im KB-Artikel vorgeschlagen wird (um die Änderungen sofort zu verbreiten), und zwar über die Eingabeaufforderung.

Testarbeiten
quelle
1
Dies ist die einzige Antwort, die für mich richtig ist. Keiner der anderen, einschließlich des Tötens von Explorer auf die harte oder "richtige" Weise, macht einen Unterschied.
Hashim
4

Mach das env. Variable sofort verfügbar:

1. Open a shell

Abhängig von der Umgebungsvariablen, die Sie ändern möchten, gehen Sie wie folgt vor: (Angenommen, Sie möchten einen neuen PFAD für eine kürzlich installierte Anwendung hinzufügen.) Geben Sie an der Shell-Eingabeaufforderung Folgendes ein:

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

Überprüfen Sie, ob Ihr neuer Pfad zur Umgebungsvariablen hinzugefügt wurde

3. echo %PATH%

Getan.

Stellen Sie die Variable beim Neustart zur Verfügung

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

Getestet und lauffähig unter Windows 7/10

Pedro Sousa
quelle
3

Eine mögliche Lösung für Dienste besteht darin, sie vorübergehend als ein anderer Benutzer (außer LocalSystem, LocalService, NetworkService) auszuführen. Zum Beispiel für den Apache-Dienst funktioniert dies ohne Probleme. Um das Dienstkonto zu ändern, öffnen Sie die services.msc-Konsole, wählen Sie den Dienst aus, klicken Sie auf Diensteigenschaften und geben Sie auf der zweiten Registerkarte die Anmeldeinformationen für einen Benutzer ein. Starten Sie den Dienst neu und die Umgebungsvariablen sollten auf dem neuesten Stand sein.

Wenn dies ein angemeldeter Benutzer ist, sollte dies problemlos funktionieren. Wenn Sie das aktuelle Benutzerkonto verwenden, muss möglicherweise auch explorer.exe neu gestartet werden. Beachten Sie auch, dass das Ausführen von Diensten als normales Benutzerkonto zu Sicherheitsrisiken führen kann.

Odin
quelle
1

Da die Leute diese Antwort noch nicht hinzugefügt haben, wollte ich erwähnen, dass Sie mit dem SETX-Befehl permanente Systemvariablen festlegen können, die einen Neustart überleben.

z.B

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

Bitte beachten Sie, dass das oben Genannte im aktuellen Befehlsfenster nicht funktioniert und Sie ein neues Befehlsfenster öffnen müssen, bevor es wirksam wird. Infolgedessen je nach Anwendungsfall; Möglicherweise müssen Sie dies mit einer der oben genannten Techniken kombinieren.

Weitere Informationen finden Sie unter der folgenden URL :

Doug
quelle
funktioniert nicht: / "ungültige Syntax"
Joe DF
1
Versuch's jetzt. Anscheinend brauchte es doppelte Anführungszeichen.
Doug
Danke, ja, ich habe es mir gedacht, außer ich bekomme eine Kürzungswarnung, also kann ich nichts hinzufügen ... :(
Joe DF