Variabili ambiente utente e sistema: le variabili di sistema hanno la precedenza sulle variabili utente?


21

Ho diritti elevati sul mio laptop ma non i diritti di amministratore. I diritti di amministratore sono necessari per modificare le variabili di ambiente di sistema. Mi aspettavo che se avessi creato una variabile di ambiente utente con lo stesso nome di una variabile di ambiente di sistema, la variabile utente avrebbe sovrascritto la variabile di sistema, ma questo non sembra essere il caso.

Dopo aver aggiunto una variabile utente con lo stesso nome di una variabile di sistema, ho aperto una finestra cmd nuova di zecca e ho usato il comando echo per visualizzare la variabile. Mi ha mostrato il valore della variabile di sistema invece del valore della variabile utente.

Volevo solo confermare che si trattava di un comportamento previsto e capire il ragionamento alla base. Mi aspetto che le impostazioni dell'utente più specifiche abbiano la precedenza su quelle di sistema.

Ho Windows 7.


Quando si modificano le variabili spesso è necessario riavviare completamente Windows. La modifica di una variabile nelle impostazioni non cambierà i processi in esecuzione. Nuovi processi copiano l'ambiente dai processi in esecuzione (a seconda di come sono stati avviati), quindi semplicemente avviare un processo non significa ottenere un nuovo ambiente.
Zoredache,

Ho riavviato e ancora quando eseguo "echo% path%" da una finestra cmd.exe, visualizza la mia variabile env di sistema, non il valore della variabile utente. Quindi, ho cancellato la variabile Utente, o Accesso amministratore, ho cambiato la mia variabile del percorso di sistema e ho fatto lo stesso cmd di eco. Il valore env aggiornato è stato visualizzato senza riavvio. Questo mi dice che i vars USER non sovrascrivono i vars di sistema e che non è necessario un riavvio. Neitehr è quello che mi aspettavo.
Chad,

Quale procedura utilizzata per aggiungere una variabile utente con lo stesso nome di una variabile di sistema ? Qualcosa del genere ?
JosefZ,

JosefZ: sì, ho aggiunto le due variabili d'ambiente, una USER e l'altro SYSTEM, entrambi con lo stesso nome, usando la GUI di Windows 7 simile alle schermate mostrate nel tuo link.
Chad,

@Chad La risposta che hai accettato sotto non è esattamente l'opposto della tua esperienza? Come si spiega la discrepanza?
RockPaperLizard

Risposte:


25

Secondo l'articolo MSKB Variabili d'ambiente in Windows NT :

Variabili di ambiente dell'utente .... hanno la precedenza sulle variabili di ambiente di sistema.

Un'eccezione notevole è la PATHvariabile che è un risultato combinato del sistema e delle variabili utente:

Il percorso viene creato dal percorso di sistema, che può essere visualizzato nel campo Variabili di ambiente di sistema nella finestra di dialogo Sistema. Il percorso utente viene aggiunto al percorso di sistema.

L'articolo discute anche eccezioni identiche per l'espansione delle variabili LibPathe Os2LibPathe come autoexec.batvengono gestite quelle specificate in . È probabile che questi punti trovino scarsa rilevanza negli ambienti tipici di oggi.

Ringraziamo questa risposta SO


2
È possibile effettuare il percorso utente anteponendo il percorso di sistema?
Qwerty,

3

Tutto ciò che Twisty Impersonator ha detto nella loro risposta è corretto. L'idea che la variabile del percorso dell'utente sia stata aggiunta è stata evidenziata e credo che le conseguenze di tale differenza richiedano un trattamento aggiuntivo.

Path =% Path% (Sistema); % Percorso% (utente)

Quando si esegue un programma eseguibile (o qualsiasi script eseguibile, come ad esempio .bat, .vbse così via) non è necessario fornire il percorso completo.

Ad esempio, per eseguire java, è possibile digitare uno di questi:

C:/Program Files (x86)/Java/jre6/bin/java -version

java.exe -version

java -version

Il primo esempio utilizza un percorso completo. Questo utilizzerà sempre la versione di Java in quel percorso esatto.

Il secondo esempio esaminerà ciascuna delle directory nella %Path%variabile d'ambiente, alla ricerca di un file eseguibile chiamato java.exe. Eseguirà il primo trovato e interromperà la ricerca. Se ci sono due file chiamati java.exeda qualche parte sul %Path%, viene utilizzato solo il primo trovato.

Il terzo esempio, come il secondo, ripeterà le directory elencate in %Path%. Inoltre, poiché non è stata fornita un'estensione di file, un elenco di estensioni di file eseguibili viene aggiunto al nome del file, nell'ordine specificato nella %PATHEXT%variabile di ambiente. Se ci sono più file denominati java.com, java.exe, java.bat, ecc da qualche parte sulla %Path%, viene utilizzato solo il primo trovato.

È possibile visualizzare l'elenco delle estensioni di percorso eseguibili sul proprio sistema creando il seguente file batch:

@echo off
echo %PATHEXT%
pause

Sulla mia macchina, questi sono:

.COM; .EXE; BAT; cmd; .VBS; .vbe; .JS; .JSE; .wsf; .WSH; MSC; .PY

Cosa significa tutto questo?

In netto contrasto con altre variabili d'ambiente, il percorso dell'utente non consente di sovrascrivere il percorso del sistema. È esattamente il contrario. Dagli esempi sopra, ci sono molti casi in cui potresti cambiare la versione predefinita di Java. Tuttavia, se esiste già una versione Java elencata nel percorso di sistema, questa è la versione che verrà SEMPRE trovata per prima, perché il percorso viene cercato in ordine, da sinistra a destra, e il percorso dell'utente viene aggiunto a destra lato mano, con il percorso del sistema a sinistra.

Cosa posso fare al riguardo?

Se non si ha accesso alle variabili di ambiente di sistema, non è possibile ignorare i programmi predefiniti sul percorso di sistema utilizzando il percorso utente. (In effetti, deve essere così, o alcuni programmi smetterebbero di funzionare correttamente e aprirebbe il tuo sistema a manomissioni da software dannoso. Nessuno lo vuole.)

Invece, è necessario utilizzare un percorso completo se è necessario utilizzare una versione specifica.


1
È possibile effettuare il percorso utente anteponendo il percorso di sistema?
Qwerty,

1
Sarebbe un buon argomento per una domanda diversa. (Una rapida ricerca su questo sito non ha rivelato nulla di immediatamente rilevante.) Sentiti libero di porre una nuova domanda e pubblica un link qui nei commenti!
JonathanDavidArndt
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.