Come si aggiunge una variabile di ambiente Windows senza riavviare?


181

Vorrei aggiungere una variabile d'ambiente a una macchina Windows (desktop o server) ed essere in grado di usarla senza riavviare quella macchina.

Supponi di avere un server di produzione che ospita una varietà di app e che una nuova app necessita di una particolare variabile di ambiente per funzionare. Non vuoi riavviarlo mentre gli utenti sono connessi ad altre tue app. Che scelte hai? Non mi piace l'opzione wait-until-a-good-time-to-reboot. Deve esserci un modo migliore. Cosa mi sto perdendo?


2
Ho avuto lo stesso problema. Ho letto da qualche parte che uccidere il processo explorer.exe aggiornerebbe le variabili e ha funzionato. Quindi ho dovuto solo eseguire Explorer da Task Manager.
user19694

1
È necessario chiudere il prompt dei comandi e riaprirlo nuovamente per l'aggiornamento delle variabili del percorso. Le variabili vengono caricate all'avvio di cmd.
NiLInfinite

Risposte:


162

Le modifiche alle variabili di ambiente dovrebbero avere effetto immediato, se si effettua la modifica tramite la finestra di dialogo Proprietà principale per il computer in questione (andare su Risorse del computer | Proprietà | Avanzate | Variabili di ambiente). Dopo aver salvato le modifiche, Explorer trasmette un WM_SETTINGCHANGEmessaggio a tutte le finestre per informarle della modifica. Tutti i programmi generati tramite Explorer dopo questo dovrebbero ottenere l'ambiente aggiornato, anche se i programmi già in esecuzione non lo faranno, a meno che non gestiscano il messaggio di modifica delle impostazioni.

Non sono in grado di dire dalla descrizione del tuo problema quale specifico problema stai riscontrando con questo. Puoi dirci di più sullo scenario specifico che non funziona?

Questo articolo della KB può anche essere utile: come propagare le variabili di ambiente al sistema


2
Ok, immagino di aver visto questo comportamento su un servizio in esecuzione o qualcosa del genere. Ho aggiunto una nuova variabile d'ambiente usando il metodo sopra descritto. Quindi, sono stato in grado di vedere il valore dopo aver aperto un nuovo prompt dei comandi e utilizzando il comando "echo% <myvar>%. Grazie ad entrambi per le risposte.
Chad Braun-Duin,

5
Per gli utenti di PowerShell questo frammento può essere di aiuto: poshcode.org/2049
Anders Zommarin,

8
Se si utilizza cmd, è necessario riavviarlo se si modifica la variabile env
Neil McGuigan,

4
Ho appena installato Scala sul mio PC ma il PERCORSO non si è aggiornato; presumibilmente l'MSI non ha trasmesso il messaggio WM_SETTINGCHANGE. Ho aggiunto una variabile di sistema fittizia, ad esempio CHANGE_TO_UPDATE = z, che aggiorno per attivare il messaggio WM_SETTINGCHANGE - problema risolto
Darren Bishop,

3
404 per il link :-(
Samoth

63
  1. Nel prompt dei comandi digitare: runas /user:yourusername@yourdomain cmd
  2. Si aprirà un nuovo prompt cmd, quindi digitare: taskkill /f /im explorer.exe
  3. Quindi digitare: explorer.exe

Ora dopo aver chiuso tutti i prompt dei comandi, vedrai che la PATHvariabile è stata veramente aggiornata.

Tutti i prompt dei comandi devono essere chiusi. Riapri un nuovo prompt dei comandi, digita path e vedrai i nuovi dati.


6
Di tutte le risposte in questa pagina, questa è l'unica che ha funzionato davvero per me. Grazie!!
coredumperror,

2
Questo ha funzionato per me. Penso che il problema sia che se esegui cmd tramite explorer (per evitare di dover digitare lunghi percorsi), allora explorer non si chiuderà mai, anche se chiudi tutte le finestre di explorer. Grazie per la soluzione :)
Steve Mc

Ha funzionato per me. Puoi anche utilizzare Task Manager per terminare le attività di Explorer e riavviarlo (File> Esegui nuova attività).
adabyron,

7
Uhh. Per favore, non uccidere Windows Explorer a meno che uno dei suoi processi non sia bloccato. Invece, apri la finestra di dialogo delle finestre di spegnimento e annullala mentre tieni premuto ctrl+alt+shift. Questo uscirà senza problemi da Windows Explorer. In Vista + la finestra di dialogo delle finestre di arresto è più difficile da trovare (ma è ancora presente, almeno attraverso 7 (non sono sicuro circa 8 e 10)), quindi esiste un secondo metodo. ctrl + maiusc + clic con il tasto destro in una parte vuota del menu di avvio e scegliere Exit Explorer. In 8 l'opzione di uscita è la stessa, ma si utilizza la barra delle applicazioni non il menu di avvio.
Kevin Cathcart,

1
+1 Funziona come un incantesimo su Windows 7. Cordiali saluti, ho semplicemente usato CTRL + ALT + MAIUSC e dal Task Manager di Windows ho ucciso tutto il processo explorer.exe e poi lo ho riavviato premendo il pulsante Nuova attività .
Marco Demaio,

19

Una cosa da tenere a mente è che molti programmi ottengono le variabili ambientali al primo avvio, quindi mentre Windows potrebbe non aver bisogno di un riavvio, alcuni programmi potrebbero prima che possano usare le nuove variabili. Un buon esempio di ciò è dover aprire una nuova finestra del prompt dei comandi dopo aver aggiunto un PERCORSO (sì, sono stato inciampato da questo).


3
Questo problema riguarda TUTTI I SERVIZI, anche un servizio riavviato non vedrà nuove variabili di ambiente.
Gimel,

1
Sei sicuro che non sia dovuto alla condivisione di un processo svchost?
Mark Sowul,

16

Anche se non ho abbastanza reputazione per commentare la risposta più votata a questa domanda, vorrei affermare che non è esattamente corretto. Lo so perché, indipendentemente dalla soluzione che ho provato in questo post, nulla ha funzionato.

L' articolo di kb collegato a quella risposta afferma in realtà che:

Tuttavia, si noti che le modifiche alle variabili di ambiente non comportano cambiamenti immediati. Ad esempio, se si avvia un altro prompt dei comandi dopo aver apportato le modifiche, le variabili di ambiente rifletteranno i valori precedenti (non quelli correnti). Le modifiche non avranno effetto fino a quando non ti disconnetti e poi riconnetti.

La parte relativa alle variabili di ambiente che si ripristinano ai valori precedenti dopo aver ricaricato il prompt dei comandi è esattamente ciò che ho riscontrato in Windows Server 2008.

L'articolo continua dicendo:

Per effettuare queste modifiche senza disconnettersi, trasmettere un messaggio WM_SETTINGCHANGE a tutte le finestre del sistema, in modo che tutte le applicazioni interessate (come Esplora risorse, Program Manager, Task Manager, Pannello di controllo e così via) possano eseguire un aggiornamento.

Ciò non implica che Explorer trasmette un messaggio WM_SETTINGCHANGE dopo aver modificato le variabili di ambiente di sistema o che funzioni effettivamente. Non sono sicuro di come faresti ciò che è suggerito nell'articolo KB (per propagare immediatamente le modifiche) dal prompt dei comandi.


1
Questa è l'unica risposta giusta per me. Nessuno degli altri, incluso uccidere Explorer nel modo più duro o "corretto", fa la differenza.
Hashim,

4

Crea l'inv. variabile disponibile subito:

1. Open a shell

A seconda della variabile di ambiente che si desidera modificare, procedere come segue: (supporre di voler aggiungere un nuovo PERCORSO per un'applicazione installata di recente) Quindi, al prompt della shell, digitare quanto segue:

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

controlla che il tuo nuovo percorso sia stato aggiunto alla variabile d'ambiente

3. echo %PATH%

Fatto.

Rendi disponibile la variabile al riavvio

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

Testato e funzionante su Windows 7/10


3

Una possibile soluzione per i servizi è eseguirli temporaneamente come un altro utente (diverso da LocalSystem, LocalService, NetworkService). Ad esempio per il servizio Apache funziona senza problemi. Per modificare l'account del servizio, aprire la console di services.msc, selezionare servizio, fare clic su Proprietà servizio e nella seconda scheda immettere le credenziali di accesso per un utente. Riavvia il servizio e le sue variabili di ambiente dovrebbero essere aggiornate.

Se si tratta di un utente di cui è stato effettuato il log-in, questo dovrebbe funzionare senza problemi. Se si utilizza l'account utente corrente, potrebbe essere necessario riavviare explorer.exe. Si noti inoltre che l'esecuzione di servizi come normale account utente potrebbe creare rischi per la sicurezza.


1

Poiché le persone non hanno ancora aggiunto questa risposta, volevo menzionare che è possibile impostare variabili di sistema permanenti che sopravvivono al riavvio con il comando SETX.

per esempio

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

Si noti che quanto sopra non funzionerà nella finestra di comando corrente e richiederà di aprire una nuova finestra di comando prima che abbia effetto. Di conseguenza, a seconda del caso d'uso; potrebbe essere necessario combinare questo con una delle altre tecniche sopra.

Si prega di consultare il seguente URL per ulteriori dettagli :


non funziona: / "sintassi non valida"
Joe DF

1
Prova ora. Apparentemente aveva bisogno di virgolette doppie.
Doug

Grazie, sì, ho pensato ... tranne per il fatto che ricevo un avviso di troncamento, quindi non posso aggiungerlo ... :(
Joe DF
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.