48 votes

Pourquoi Windows ne peut-il pas gérer une variable d'environnement dans Path ?

Mon collègue et moi-même avons des stations de travail Dell identiques avec Windows XP Professional x64 edition installé.

Ma variable d'environnement Path commence par :

%JAVA_HOME%\bin;...

La variable Path de mon collègue inclut le même répertoire, spécifié à l'aide de la même variable d'environnement, mais ce n'est pas le premier élément de son Path.

Si j'accède aux propriétés du système -> variables d'environnement et que je modifie la valeur de ma variable JAVA_HOME, la version de java trouvée à partir de la ligne de commande change comme je m'y attendais. Ceci démarre une toute nouvelle fenêtre de console, afin d'être sûr de récupérer les changements.

Mais sur la machine de mon collègue, ce n'est pas le cas. Il continue à trouver sa version précédente de Java jusqu'à ce qu'il fasse apparaître sa variable Path et l'enregistre (même s'il n'y apporte aucune modification). (Encore une fois, il s'agit du démarrage d'une toute nouvelle fenêtre de console).

J'ai observé cette incohérence sous Windows depuis environ 6 mois et je suis très curieux à ce sujet. Nous avons beaucoup trop de versions de Windows dans notre bureau, donc j'ai rarement eu l'occasion de voir ce phénomène se produire sur deux machines fonctionnant exactement avec la même version du système d'exploitation, jusqu'à présent.

Quelle en est la cause ? Pourquoi sa machine ne réévalue-t-elle pas Path, en utilisant le nouveau JAVA_HOME, alors que la mienne le fait ?

(Est-ce parce que ce n'est pas la première chose dans le chemin ? Si oui, comment cela se fait-il et pourquoi ? Je ferais bien d'autres tests pour vérifier, mais je pense qu'il en a maintenant assez et qu'il aimerait se remettre au travail).

2voto

Andy Morris Points 1363

Ajoutez les variables d'environnement lorsque vous êtes connecté à la session /console à l'aide de MSTSC.

Redémarrez la machine et vous constaterez que vos variables d'environnement ont été conservées.

Il semble qu'il y ait une bizarrerie dans le système d'exploitation en fonction de la façon dont vous étiez connecté à la machine lorsque vous avez tenté de modifier la variable d'environnement.

1voto

libjack Points 111

Cela peut être lié à la fonction "expansion retardée des variables d'environnement" (ou à l'absence de cette fonction), ou peut-être pouvez-vous tirer parti de cette fonction pour toujours avoir une solution correcte.

à partir d'une invite cmd

set /? 

et lisez la section décrivant "l'expansion retardée des variables d'environnement", qui inclut un petit exemple pour tester

set VAR=before
if "%VAR%" == "before" (
    set VAR=after
    if "%VAR%" == "after" @echo If you see this, it worked
)

Si vous n'obtenez pas la ligne d'écho, cela pourrait expliquer la situation...

Cependant, si vous démarrez cmd.exe avec l'option /V, vous pouvez utiliser " !" au lieu de "%", ce qui modifie l'apparence.

set VAR=before
if "%VAR%" == "before" (
    set VAR=after
    if "!VAR!" == "after" @echo If you see this, it worked
)

Pour moi (sous XP), le 1er script n'a pas fonctionné, mais la seconde version a fonctionné (avec cmd.exe /V)

1voto

The Great Java Points 1006

J'ai eu le même problème, et je sais comment le résoudre, c'est nul.

Il suffit d'éditer à nouveau votre PATH, sans rien changer, et de réenregistrer PATH. Pour une raison quelconque, cela entraîne la réévaluation de toutes les références aux variables d'environnement imbriquées.

Si cela ne fonctionne pas, recommencez plusieurs fois, vous verrez que cela s'arrangera tout seul.

1voto

user539484 Points 450

Je pense que Windows ne parvient pas à développer une variable dans PATH parce qu'il pense qu'elle n'est pas encore définie. Considérez :

REM Ensure variable is undefined
SET UNDEFINED=
REM And then try to expand it
ECHO UNDEFINED=%UNDEFINED%

Cette hypothèse est conforme à mon autre observation - l'ajout de %ProgramFiles%\Something à la utilisateurs PATH se traduira toujours par une expansion attendue de %ProgramFiles% si elle a été définie dans l'environnement de la machine au moment de la notification du changement de variable (ordre de chargement - MACHINE puis UTILISATEUR). Mais lorsque vous modifiez l'environnement de la machine, l'expansion correcte de la variable ne se produit qu'au moment du démarrage (pour l'instant, je n'en ai aucune idée). comment et pourquoi cela ne se produit pas régulièrement).

0voto

Bill K Points 36

Peut-être vous y prenez-vous mal ?

J'ai essayé avec Windows XP Pro SP3 (32bit). J'ai un chemin avec plusieurs occurrences de %JAVA_HOME% (et %JAVAFX_HOME% etc.) Je vais en ligne de commande, je tape PATH Je vois que les variables sont élargies. C'est bien.

Je modifie la valeur de JAVA_HOME . Retour à la même fenêtre de ligne de commande, PATH encore une fois, même valeur... comme prévu (par expérience !).

J'ouvre une nouvelle fenêtre de ligne de commande, je tape PATH Je vois la nouvelle valeur.

Je ne suis pas sûr du mécanisme exact, mais il semble que tout programme en cours d'exécution, y compris cmd.exe, capture les valeurs des variables d'environnement au moment du démarrage, et ne revient pas en arrière... (bien que je pense qu'un programme qui se comporte bien peut écouter les changements d'environnement, mais je n'en suis pas sûr).

Cela peut être considéré comme une caractéristique, un bogue ou une gêne, mais c'est ainsi que cela fonctionne. Au moins, contrairement à Win9X, il n'est pas nécessaire de redémarrer l'ordinateur ! Et contrairement à l'époque NT (IIRC), il n'est pas nécessaire de se déconnecter et de revenir.

Pourquoi cette incohérence ? Les voies de Microsoft sont impénétrables... :-P

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X