web-dev-qa-db-fra.com

Pourquoi les modifications apportées à PATH ne sont-elles pas reconnues?

Lorsque je mets à jour mon PATH à l'aide de la boîte de dialogue Variables d'environnement intégrée ou de quelque chose comme Editeur de chemin , puis j'ouvre une invite de commande, les modifications à mon chemin ne sera pas enregistré avec la console, en fonction du lieu où l'invite de commande a été lancée.

Par exemple, si je modifie mon chemin PATH, puis que je lance cmd.exe à partir du menu Démarrer ou d'un raccourci sur le bureau, mon chemin PATH se présente bien: il a été mis à jour avec succès; Cependant, si je lance cmd.exe à partir d'un raccourci autre que le menu Démarrer ou le Bureau, le nouveau PATH n'est pas lu et Je reçois l'ancien chemin à la place. C'est très étrange.

J'ai essayé d'exécuter la commande Invite à partir d'un raccourci sur le bureau et tout fonctionne correctement. Je copie ensuite le même raccourci dans un sous-dossier du bureau et le problème PATH non mis à jour est résolu.

Je réalise que c'est assez difficile à expliquer, alors j'ai créé un screencast pour montrer ce problème en action .

Voici une capture d'écran du raccourci d'invite de commande, comme indiqué dans cette capture d'écran:

Command Prompt shortcut settings

C'est sur Windows Vista Home Premium SP2.

36
Charles Roper

Comme Rowland le suggère, lors du démarrage d'un nouveau processus, il lira les variables d'environnement à partir du processus qui le démarre. Par conséquent, lors du lancement d’une invite de commande à partir du menu Démarrer ou du bureau , il lit les variables d’environnement à partir de Explorer.exe qui, suggère grawity, détecte les modifications apportées aux paramètres d’environnement dans le registre et je vois donc mon nouveau chemin PATH dans les invites de commande démarrées à partir du bureau ou du menu Démarrer.

La raison pour laquelle je ne vois pas de mises à jour de PATH dans la capture d'écran que j'ai postée est due au fait que j'avais initialement lancé une fenêtre de l'Explorateur en utilisant FARR faisant de FindAndRunRobot.exe le parent processus. FARR ne détecte pas automatiquement les modifications de l'environnement et, par conséquent, les processus enfants générés à partir de celui-ci ne récupèrent pas le nouveau PATH. J'avais aussi l'option ' Lancer les fenêtres de dossier dans un processus séparé ' définie dans l'Explorateur, ce qui signifie que toutes les fenêtres Explorer.exe que j'ai ouvertes après la première. ouvert par FARR où étaient aussi des enfants de FARR .

En désactivant l'option ' Lancer les fenêtres de dossiers dans un processus séparé ', les nouveaux processus Explorer.exe ne sont pas créés sous FARR, ce qui résout mon problème. Cependant, je lance également des fenêtres de console et d'autres choses directement à partir de FARR; ceux-ci récupèrent également les anciens paramètres d'environnement. Si je redémarre FARR, les nouveaux paramètres d'environnement sont propagés.

Voici une capture d'écran de Process Explorer montrant les processus générés par FARR. Aucun de ces processus ne reçoit les nouveaux paramètres d'environnement à partir du Explorer.exe de niveau supérieur, à moins que je ne redémarre FARR:

process Explorer

26
Charles Roper

Lorsque vous démarrez un nouveau processus (une nouvelle ligne de commande, par exemple), les variables d'environnement sont extraites du processus qui le démarre. Lorsque le chemin est mis à jour, seul le processus effectuant la mise à jour peut savoir qu'il a été modifié et le paramètre ne se propage que lorsque vous vous reconnectez (pour les paramètres par utilisateur) ou que vous redémarrez (pour les paramètres du système).

29
Rowland Shaw