Perché le modifiche al mio PERCORSO non vengono riconosciute?


36

Quando aggiorno il mio PERCORSO utilizzando la finestra di dialogo Variabili d'ambiente incorporata o qualcosa come Path Editor e quindi apro un prompt dei comandi, le modifiche al mio PERCORSO non si registreranno con la console, a seconda di dove si trovasse il prompt dei comandi iniziato da.

Ad esempio, se modifico il mio PERCORSO e quindi avvio cmd.exe dal menu Start o un collegamento sul desktop, il mio PERCORSO sembra a posto: è stato aggiornato con successo; tuttavia, se avvio cmd.exe da un collegamento diverso dal menu Start o dal desktop, il nuovo PERCORSO non viene letto e ottengo invece il vecchio percorso. È molto strano.

Ho provato a eseguire il prompt dei comandi da un collegamento sul desktop e funziona bene; Quindi copio lo stesso collegamento esatto in una sottocartella sul desktop e ottengo il problema PATH non aggiornante.

Mi rendo conto che è piuttosto difficile da spiegare, quindi ho creato uno screencast per mostrare questo problema in azione .

Ecco uno screenshot della scorciatoia del Prompt dei comandi come mostrato in quel screencast:

Impostazioni del collegamento al prompt dei comandi

Questo è su Windows Vista Home Premium SP2.

Risposte:


30

Quando si avvia un nuovo processo (ad esempio una nuova riga di comando), verranno prelevate le variabili di ambiente dal processo che lo sta avviando. Quando il percorso viene aggiornato, solo il processo che esegue l'aggiornamento può sapere che è cambiato e l'impostazione non si propaga fino a quando non si accede nuovamente (per le impostazioni per utente) o si riavvia (per le impostazioni a livello di sistema)


2
Tuttavia, il explorerprocesso principale rileverà le modifiche all'ambiente nel Registro di sistema (la finestra di dialogo appartiene rundll32) e aggiornerà automaticamente il proprio ambiente. (Almeno in XP lo fa.) Ecco perché le modifiche sono visibili quando si inizia cmdda un collegamento.
gravità

Rowland, questo mi ha fornito informazioni sufficienti per risolvere esattamente il motivo per cui ciò stava accadendo, anche se non ha risposto completamente alla mia domanda. Vedi la mia risposta per i dettagli. Grazie!
Charles Roper,

Grazie per questa risposta! Tutto quello che dovevo fare era chiudere il mio prompt dei comandi e riaprirlo.
user1477388

Questa è stata la soluzione per me! Sto usando Git Bash per Windows all'interno di un wrapper multitab (ConEmu) e mi chiedevo perché echo $PATHnon funzionasse. Ho pensato che sarebbe stato fresco, ma non è uscito subito fino a quando non ho chiuso tutte le schede di Git Bash e ConEmu.
Oliv Utilo,

27

Come suggerisce Rowland, all'avvio di un nuovo processo, leggerà le variabili di ambiente dal processo che lo sta avviando. Pertanto, quando si avvia un prompt dei comandi dal menu Start o dal desktop , legge le variabili di ambiente da explorer.execui, come suggerisce Grawity, rileva le modifiche alle impostazioni dell'ambiente nel registro e quindi vedo il mio nuovo PERCORSO nei prompt dei comandi avviato dal Desktop o menu Start.

Il motivo per cui non vedo gli aggiornamenti del mio PERCORSO nello screencast che ho pubblicato è perché inizialmente avevo avviato una finestra di esplorazione utilizzando FARR per rendere FindAndRunRobot.exeil processo padre. FARR non rileva automaticamente i cambiamenti dell'ambiente e quindi i processi figlio generati da esso non raccolgono il nuovo PERCORSO. Avevo anche impostato l'opzione " Avvia le finestre delle cartelle in un processo separato " in Explorer, il che significa che tutte le finestre explorer.exe che ho aperto dopo quella iniziale aperta da FARR erano anch'esse figlio di FARR .

Disattivando l' opzione " Avvia le finestre delle cartelle in un processo separato ", i nuovi explorer.exeprocessi non vengono creati in FARR, il che risolve il mio problema. Tuttavia, lancio anche le finestre della console e altre cose direttamente da FARR; questi ottengono anche le vecchie impostazioni dell'ambiente. Se riavvio FARR, vengono propagate le nuove impostazioni di ambiente.

Ecco uno screenshot di Process Explorer che mostra i processi generati da FARR. Nessuno di questi processi riceve le nuove impostazioni di ambiente dal livello superiore a explorer.exemeno che non riavvii FARR:

esploratore di processo


3
Perché la mia risposta è stata annullata? Se c'è un difetto, fammi sapere e proverò a risolverlo.
Charles Roper,

ha molto senso.
lwpro2,
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.