J'ai des droits élevés sur mon ordinateur portable mais pas des droits d'administrateur. Les droits d'administrateur sont requis pour modifier les variables d'environnement 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 toute 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 que c'est un comportement attendu et comprendre le raisonnement derrière cela. Je m'attendrais à ce que le paramètre utilisateur plus spécifique remplace celui du système.
J'ai Windows 7.
Réponses:
Selon l'article MSKB Variables d'environnement dans Windows NT :
Une exception notable est la
PATH
variable qui est un résultat combiné des variables système et utilisateur:L'article traite également des exceptions identiques pour l'expansion des variables
LibPath
etOs2LibPath
ainsi que de la façon dont celles spécifiées dansautoexec.bat
sont traitées. Ces points sont susceptibles de trouver peu de pertinence dans les environnements typiques d'aujourd'hui.Crédit à cette réponse SO
la source
Tout ce que Twisty Impersonator a dit dans sa réponse est correct. L'idée que la variable de chemin utilisateur est ajoutée a été mise en évidence, et je pense que les conséquences de cette différence nécessitent un traitement supplémentaire.
Lorsque vous exécutez un programme exécutable (ou tout script exécutable, par exemple
.bat
,.vbs
etc.) vous n'avez pas besoin de fournir le chemin complet.Par exemple, pour exécuter
java
, vous pouvez saisir n'importe lequel de ces éléments:Le premier exemple utilise un chemin d'accès complet. Cela utilisera toujours la version de Java sur ce chemin exact.
Le deuxième exemple passera par chacun des répertoires de la
%Path%
variable d'environnement, à la recherche d'un fichier exécutable nomméjava.exe
. Il exécutera le tout premier trouvé et arrêtera la recherche. S'il y a deux fichiers nommésjava.exe
quelque part sur le%Path%
, seul le premier trouvé est utilisé.Le troisième exemple, comme le second, parcourra les répertoires répertoriés dans le
%Path%
. En outre, 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%PATHEXT%
variable d'environnement. S'il y a plusieurs fichiers nommésjava.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 exécutables sur votre système en créant le fichier de commandes suivant:
Sur ma machine, ce sont:
Qu'est-ce que tout cela signifie?
En contraste à d' autres variables d'environnement, le chemin d'utilisateur ne vous permet pas de passer outre le chemin du système. L'exact opposé est le cas. Dans les exemples ci-dessus, il existe de nombreux cas où vous pouvez modifier la version par défaut de Java. Cependant, s'il existe déjà une version Java répertoriée dans le chemin d'accès système, c'est la version qui sera TOUJOURS trouvée en premier, car le chemin est recherché dans l'ordre, de gauche à droite, et le chemin 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 système, vous ne pouvez pas remplacer les programmes par défaut sur le chemin système en utilisant le chemin utilisateur. (En fait, il doit en être ainsi, sinon certains programmes cesseraient de fonctionner correctement et cela ouvrirait votre système à la falsification de logiciels malveillants. Personne ne veut ça.)
Au lieu de cela, vous devez utiliser un chemin d'accès complet si vous devez utiliser une version spécifique.
la source