web-dev-qa-db-fra.com

Variables d'environnement utilisateur / système: les variables système remplacent-elles les variables utilisateur?

J'ai des droits élevés sur mon ordinateur portable mais pas des droits d'administrateur. Des droits d'administrateur sont requis pour modifier les variables d'environnement du système. Je m'attendais à ce que si je créais une variable d'environnement utilisateur portant le même nom qu'une variable d'environnement système, la variable utilisateur remplacerait la variable système, mais cela ne semble pas être le cas.

Après avoir ajouté une variable utilisateur du même nom qu'une variable système, j'ai ouvert une nouvelle fenêtre cmd et utilisé la commande echo pour afficher la variable. Il m'a montré la valeur de la variable système au lieu de la valeur de la variable utilisateur.

Je voulais juste confirmer le comportement attendu et comprendre le raisonnement qui le sous-tend. Je m'attendrais à ce que le paramètre utilisateur le plus spécifique remplace le paramètre système.

J'ai Windows 7.

17
Chad

Selon l'article MSKB Variables d'environnement sous Windows NT :

Les variables d'environnement utilisateur ... ont priorité sur les variables d'environnement système.

Une exception notable est la variable PATH qui est un résultat combiné des variables système et utilisateur:

Le chemin est construit à partir du chemin système, qui peut être affiché dans le champ Variables d'environnement système de la boîte de dialogue Système. Le chemin de l'utilisateur est ajouté au chemin du système.

L'article traite également des exceptions identiques pour le développement des variables LibPath et Os2LibPath, ainsi que de la façon dont celles spécifiées dans autoexec.bat sont gérées. Ces points sont susceptibles de trouver peu de pertinence dans les environnements typiques d'aujourd'hui.

crédit à cette SO réponse

21
Twisty Impersonator

Tout ce que Twisty Impersonator a dit dans sa réponse est correct. L'idée d'ajouter la variable de chemin d'accès utilisateur a été mise en évidence et je pense que les conséquences de cette différence nécessitent un traitement supplémentaire.

Path =% Path% (System); % Chemin% (utilisateur)

Lorsque vous exécutez un programme exécutable (ou tout script exécutable, tel que .bat, .vbs, etc.), vous n'avez pas besoin de fournir le chemin d'accès complet.

Par exemple, pour exécuter Java, vous pouvez entrer l’un de ces types:

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

Java.exe -version

Java -version

Le premier exemple utilise un chemin d'accès complet. Cela utilisera toujours la version de Java à ce chemin exact.

Le deuxième exemple passera par chacun des répertoires de la variable d'environnement %Path%, à la recherche d'un fichier exécutable nommé Java.exe. Il lancera le tout premier qui est trouvé et arrêtera de chercher. S'il existe deux fichiers nommés Java.exe quelque part sur le %Path%, seul le premier trouvé est utilisé.

Le troisième exemple, comme le second, itérera sur les répertoires listés dans le %Path%. De plus, comme aucune extension de fichier n'a été fournie, une liste d'extensions de fichiers exécutables est ajoutée au nom du fichier, dans l'ordre spécifié dans la variable d'environnement %PATHEXT%. S'il existe plusieurs fichiers nommés Java.com, Java.exe, Java.bat, etc. quelque part sur le %Path%, seul le premier trouvé est utilisé.

Vous pouvez voir la liste des extensions de chemin d'accès exécutables sur votre système en créant le fichier de commandes suivant:

@echo off
echo %PATHEXT%
pause

Sur ma machine, ce sont:

.COM; .EXE; .BAT; .CMD; .VBS; .VBE; .JS; .JSE; .WSF; .WSH.

Qu'est-ce que tout cela signifie?

En contraste marqué avec une autre variable d'environnement, le chemin d'accès de l'utilisateur ne vous permet pas de remplacer le chemin du système. Le contraire est le cas. Parmi les exemples ci-dessus, il existe de nombreux cas où vous pouvez changer la version par défaut de Java. Toutefois, si une version Java est déjà répertoriée dans le chemin système, il s'agit TOUJOURS de la première à la première recherche, car le chemin est recherché dans l'ordre, de gauche à droite, et le chemin de l'utilisateur est ajouté à droite. côté main, avec le chemin du système sur la gauche.

Que puis-je faire à ce sujet?

Si vous n'avez pas accès aux variables d'environnement du système, vous ne pouvez pas remplacer les programmes par défaut sur le chemin du système en utilisant le chemin de l'utilisateur. (En fait, il doit être ainsi, sinon certains programmes cesseraient de fonctionner correctement et votre système serait falsifié par des logiciels malveillants. Personne ne le souhaite.)

Au lieu de cela, vous devez utiliser un chemin d'accès complet si vous devez utiliser une version spécifique.

1
JonathanDavidArndt