Mon collègue et moi avons des postes de travail Dell identiques avec Windows XP Professionnel Édition x64 installée.
La variable d'environnement My 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 chemin.
Si j'accède aux propriétés système -> variables d'environnement et que je change la valeur de ma variable JAVA_HOME, la version de java trouvée à partir de la ligne de commande change comme prévu. Il s’agit de démarrer une toute nouvelle fenêtre de console afin d’être sûr de prendre en compte les modifications.
Mais sur la machine de mon collègue, ce n'est pas le cas. Il continue à retrouver sa version précédente de Java jusqu'à ce qu'il affiche sa variable Path et l'enregistre (même s'il ne la modifie pas). (Encore une fois, cela se produit lorsque vous démarrez une nouvelle fenêtre de console.)
J'observe cette incohérence sous Windows depuis environ 6 mois et je suis très curieux à ce sujet. Nous avons trop de versions de Windows dans notre bureau, j'ai donc rarement eu la chance de voir cela se produire sur deux ordinateurs exécutant exactement la même version de système d'exploitation, jusqu'à présent.
Qu'est-ce qui cause ça? Pourquoi sa machine ne réévalue-t-elle pas Path avec le nouveau JAVA_HOME, alors que la mienne le fait?
(Est-ce parce que ce n'est pas la première chose sur le chemin? Si oui, comment pourrait-il en être ainsi et pourquoi? Je ferais plus de tests pour vérifier, mais je pense qu'il en a maintenant assez et qu'il aimerait se remettre au travail .)
la source
Réponses:
Votre chemin est la concaténation du chemin système suivi du chemin utilisateur. De plus, les variables d'environnement système peuvent ne pas contenir de références aux variables d'environnement utilisateur et aucune de ces références ne sera développée. Pour obtenir le résultat souhaité, insérez la référence à% JAVA_HOME% dans la variable d’environnement utilisateur PATH ou créez-en une si elle n’existait pas encore.
Peut-être qu'un exemple simplifié rendra cela plus clair. Supposons que l’environnement SYSTEM soit
et l'environnement de l'utilisateur JSmith est
alors le chemin résultant serait
comme voulu.
la source
Vérifiez dans le registre Windows sous cette clé:
SI la variable d'environnement doit être développée (ici:% JAVA_HOME%)
alors la variable doit être définie en tant que valeur REG_EXPAND_SZ .
Si vous utilisez reg.exe via la ligne de commande pour ajouter / modifier des valeurs de registre, le type par défaut est REG_SZ. Spécifiez le type REG_EXPAND_SZ à l'aide de l'
reg add /t REG_EXPAND_SZ
option.la source
Il existe un problème certain avec le développement de variables d’environnement au sein de la variable PATH lorsque la variable se développe en un chemin contenant des espaces.
Nous avons créé nos propres variables de niveau système, telles que "OUR_ROOT = c: \ MyRoot", puis nous les avons utilisées dans le système PATH, telles que "PATH =;% OUR_ROOT% \ bin;". et qui est étendu correctement à "PATH =; c: \ MyRoot \ bin;". Jusqu'à présent, pas de problème.
Mais sous Windows 7 (32 bits), un produit s’est installé et a créé les variables d’environnement système suivantes:
et il l'a ajouté à la variable système PATH:
Mais les valeurs PATH affichées dans CMD contenaient "% STUDIO_BIN%;" et non le chemin étendu. La valeur dans Poste de travail> Propriétés> Avancé> Env.Vars reste également non développée. Cela signifiait que je ne pouvais pas exécuter de programmes nécessitant une DLL dans ce répertoire.
En changeant simplement STUDIO_BIN (via Poste de travail> Propriétés> Avancé ...> Env Vars) en un nom sans espaces incorporés:
puis en redémarrant la fenêtre CMD, le PATH est maintenant:
Une autre solution consiste à éditer suffisamment la variable système que vous utilisez dans PATH à l'aide de la boîte de dialogue Poste de travail> Propriétés> Avancé ...> Variables d'environnement. J'ai essayé d'ajouter un caractère et de le supprimer pour effectuer un "changement", puis OK, une nouvelle invite CMD a été lancée et PATH n'a PAS été correctement développé. J'ai ensuite essayé de supprimer une partie du chemin afin qu'il soit
(en omettant "Nom du produit 10.4") et puis voilà, la prochaine invite CMD a montré PATH avec STUDIO_BIN correctement développé!
Bizarrement, si je suis rentré et que j'ai ajouté le "Nom du produit 10.4" à STUDIO_BIN (y compris tous les espaces qui étaient à l'origine avant que je ne commence à le faucher), PATH était toujours correctement développé.
De toute évidence, le contenu de la variable PATH ayant été suffisamment modifié, il subit un traitement supplémentaire dans la boîte de dialogue Variables d'environnement qui lui permet de fonctionner. Traitement non effectué lors de l'ajout de la variable par le programme d'installation du produit (qui vient probablement de modifier directement PATH dans le registre).
Je suis presque sûr que c'était aussi un problème avec XP. Cela a juste refait surface pour moi dans Windows 7 alors que je construisais une nouvelle machine de développement. Apparemment, cela n’a pas été corrigé par Microsoft.
Apparemment, même les variables définies par MS, telles que% ProgramFiles%, ne se développeront pas correctement dans PATH.
Cette page fournit une réponse possible si vous définissez PATH via la ligne de commande ou le fichier de traitement par lots. (Placez la commande entière après SET entre guillemets.) Je ne sais pas quel programme d'installation utilisé par le produit que j'ai installé a été utilisé pour définir les variables d'environnement, mais il est évident que tout le traitement nécessaire pour développer correctement les chemins d'accès avec des espaces a été pris.
Donc, pour résumer, vous pouvez soit:
changer les chemins (et déplacer tous les fichiers associés) en chemins sans espaces, ou
éditez les variables qui ne parviennent pas à se développer dans la boîte de dialogue Variables d'environnement (modifiez-les suffisamment pour qu'elles soient traitées correctement - je ne suis pas certain que cela suffise).
la source
Je l'ai demandé sur les forums Microsoft en mars 2009 et je ne l'ai jamais résolu:
Comment utiliser% ProgramFiles% dans la variable d'environnement Path? :
J'essaie d'ajouter un dossier à la variable d'environnement Path du système.
Je veux ajouter % ProgramFiles% \ SysInternals
à la variable de chemin existante:
Donc, je vais à l'endroit où vous le modifiez:
Et j'ajoute ma variable au chemin:
Ensuite, en ouvrant une nouvelle fenêtre d'invite de commande, la variable d'environnement n'est pas remplacée par sa valeur réelle:
Ce que vous pouvez voir dans la capture d'écran suivante:
Mais pour répondre à votre question: je ne sais pas. On dirait que cela ne peut pas être fait.
la source
il existe deux niveaux de variables d'environnement, global et utilisateur. S'il a% Java_home% défini en tant que variable d'environnement utilisateur mais qu'il est en train de modifier la variable globale, il ne verra aucune différence.
la source
Assurez-vous qu'il n'y a pas d'espace dans PATH lorsque vous définissez vos propres variables d'environnement utilisateur. par exemple: C: \ GNAT \ bin; C: \ GNAT \ include ne fonctionnera pas, à cause de l’espace entre les ";" et "C: \ GNAT \ include".
la source
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 auront persisté.
Il semble y avoir une bizarrerie dans le système d'exploitation en fonction de la manière dont vous avez été connecté à la machine lorsque vous avez tenté de modifier la variable d'environnement.
la source
Cela peut être lié à la fonctionnalité "d'expansion de variable d'environnement retardée" (ou à son absence), ou peut-être pouvez-vous en tirer parti pour toujours avoir une solution correcte.
à partir d'une invite de commande
et lisez la section "Développement de variables d’environnement retardées", qui inclut un petit exemple pour tester
Si vous n'obtenez pas la ligne d'écho, cela pourrait l'expliquer ...
Si, toutefois, vous démarrez votre cmd.exe avec l'option / V, vous pouvez utiliser "!" au lieu de "%", ce qui change le comportement
Pour moi (fonctionnant sous XP), le premier script ne fonctionnait pas, mais la deuxième version le faisait (avec cmd.exe / V)
la source
J'ai eu le même problème, et je sais comment le réparer, c'est nul.
Éditez simplement votre PATH à nouveau, mais n’effectuez aucune modification et ré-enregistrez PATH. Pour une raison quelconque, toutes les références de variable d’environnement imbriquées sont réévaluées.
Si cela ne fonctionne pas, faites-le quelques fois de plus, d'une manière ou d'une autre, cela se fera tout seul.
la source
Je crois que Windows ne parvient pas à développer une variable dans PATH car il pense ce qu’elle n’a pas encore défini. Considérer:
Cette hypothèse est conforme à mon autre observation - ajouter
%ProgramFiles%\Something
aux utilisateursPATH
aboutira toujours à une expansion attendue de%ProgramFiles%
, étant donné qu’elle a été définie dans l’environnement de la machine au moment de la notification de modification de variable (ordre de chargement dû - MACHINE, puis USER). Mais lorsque vous modifiez l'environnement de la machine, les variables correctes ne se développent qu'au démarrage (pour l'instant, je ne sais pas du tout comment et pourquoi cela ne se produit pas régulièrement).la source
Vous devez tenir compte de l'ordre dans lequel les variables sont définies lors de la connexion. Si vous essayez d'utiliser une variable avant qu'elle ne soit définie, elle apparaîtra comme chaîne vide.
Le PATH effectif est la concaténation de la variable PATH de l'utilisateur suivie de la variable PATH globale.
Les variables utilisateur sont définies avant les variables globales, vous ne pouvez donc pas utiliser de variables globales dans votre variable utilisateur PATH. De plus, les variables étant définies dans l'ordre alphabétique, vous ne pouvez pas utiliser de variables triées avant PATH.
(Ceci s'applique au moins à Windows 7. Je ne l'ai pas testé sur les versions les plus récentes.)
la source
Peut-être que vous le faites mal?
J'ai essayé avec Windows XP Pro SP3 (32 bits). J'ai un chemin avec plusieurs occurrences de
%JAVA_HOME%
(et%JAVAFX_HOME%
, etc.). Je vais en ligne de commande, tapezPATH
, je vois les variables développées. Bien.Je change 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, tapez
PATH
, gotcha, je vois la nouvelle valeur.Je ne sais pas quel est le mécanisme exact, mais il semble que tout programme en cours, y compris cmd.exe, capture les valeurs des variables d’environnement au moment du démarrage et ne regarde pas en arrière ... écoute pour les changements env, pas trop sûr cependant).
Cela peut être perçu comme une fonctionnalité, un bug ou une gêne, mais c'est ainsi que cela fonctionne. Au moins, contrairement à Win9X, nous n'avons pas à redémarrer l'ordinateur! Et contrairement à NT times (IIRC), vous n’avez pas à vous déconnecter et à revenir en arrière.
Pourquoi cette incohérence? Les voies de Microsoft sont impénétrables ... :-P
la source
J'ai résolu la configuration des variables d'environnement dans Système> Paramètres avancés> Variables d'environnement .
Il y a deux panneaux, les variables utilisateur et globale (l'utilisateur est votre nom d'utilisateur Windows) et les variables système sont des variables globales. Par conséquent, si vous définissez les variables "Nouveau" à partir de l'utilisateur, telles que
JAVA_HOME
et placez votre chemin ci-dessous, vous définissez des variables même si votre chemin global avoir des fichiers de programme dans le dossier.la source