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

36

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 Path Editor , puis que j'ouvre une invite de commande, les modifications apportées à PATH ne seront pas enregistrées avec la console, en fonction de l'emplacement de l'invite de commande. commencé à partir de.

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; Toutefois, 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, mais l'ancien chemin à la place. C'est très étrange.

J'ai essayé d'exécuter l'invite de commande à 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 l’objet du problème PATH qui n’est pas mis à jour.

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:

Paramètres de raccourci de l'invite de commande

C'est sur Windows Vista Home Premium SP2.

Charles Roper
la source

Réponses:

30

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).

Rowland Shaw
la source
2
Toutefois, le explorerprocessus principal détectera les modifications de l’environnement dans le Registre (auquel appartient la boîte de dialogue rundll32) et mettra à jour automatiquement son propre environnement. (Du moins sous XP, c'est le cas.) C’est la raison pour laquelle les modifications sont visibles lors du démarrage cmdà partir d’un raccourci.
Grawity
Rowland, cela m'a fourni suffisamment d'informations pour comprendre exactement pourquoi cela se produisait, bien que cela ne réponde pas complètement à ma question. Voir ma propre réponse pour plus de détails. Merci!
Charles Roper
Merci pour cette réponse! Tout ce que je devais faire était de fermer mon invite de commande et de l'ouvrir à nouveau.
user1477388
C'était la solution pour moi! J'utilise Git Bash pour Windows dans un wrapper multitab (ConEmu) et je me suis demandé pourquoi cela echo $PATHne fonctionnait pas. Je pensais que ce serait frais, mais je ne suis pas sorti avant d'avoir fermé tous les onglets de Git Bash et de ConEmu.
Oliv Utilo
27

Comme Rowland le suggère, lors du démarrage d'un nouveau processus, il lit 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 explorer.exedesquelles, comme le suggère grawity, détecte les modifications des paramètres d’environnement dans le registre. Je vois donc mon nouveau chemin PATH dans les Bureau ou Menu Démarrer.

La raison pour laquelle je ne vois pas de mises à jour de PATH dans le screencast que j'ai posté est parce que j'avais initialement lancé une fenêtre d'explorateur à l'aide de FARR rendant FindAndRunRobot.exele processus parent. 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 du 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 à la suite de la première ouverte par FARR étaient également des enfants de FARR .

En désactivant l' option ' Lancer les fenêtres des dossiers dans un processus séparé ', les nouveaux explorer.exeprocessus 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 du niveau supérieur à explorer.exemoins que je ne redémarre FARR:

Explorateur de processus

Charles Roper
la source
3
Pourquoi ma réponse a-t-elle été rejetée? S'il y a un défaut, faites le moi savoir et j'essaierai de le réparer.
Charles Roper
c'est très logique.
lwpro2