Comment puis-je actualiser un shell cmd Windows après avoir modifié mes variables d'environnement?
c'est-à-dire qu'en bash je peux juste faire "source ~ / .bashrc"
Comment puis-je actualiser un shell cmd Windows après avoir modifié mes variables d'environnement?
c'est-à-dire qu'en bash je peux juste faire "source ~ / .bashrc"
Réponses:
Cela dépend vraiment de la façon dont vos variables d'environnement ont été définies. Si, par exemple, vous avez utilisé la commande "SET" dans la ligne de commande, elle n'affecte que l'instance actuelle. D'un autre côté, des commandes telles que "SETX" ajusteront en permanence la valeur de la variable d'environnement. SETX s'assurera que toutes les futures instances de cmd verront la mise à jour. Cela n'affectera pas l'environnement local.
Si la variable d'environnement est définie par une autre application et n'est pas en cours de mise à jour, il est souvent plus facile de redémarrer le processus "explorer.exe", de vous déconnecter et de vous reconnecter, ou de redémarrer. Essentiellement, il vous suffit de dire à l'explorateur de recharger les variables d'environnement. S'il s'agit d'une application que vous avez développée, comme un programme d'installation, assurez-vous qu'elle appelle SendMessage (HWND_BROADCAST, WM_SETTINGCHANGE, 0, (LPARAM)"Environment");
. Cela indique à l'explorateur d'actualiser son cache des variables d'environnement.
Ceci est important car les applications lancées par un autre processus héritent de leurs variables d'environnement de leur parent. Ainsi, si vous lancez cmd depuis l'explorateur, vous obtenez les variables telles que l'explorateur les voit.
La configuration et la récupération de l'environnement maître dans Windows sont quelque chose sur lequel les gens de BartPE ont passé beaucoup de temps.
L'environnement principal est stocké dans le registre, mais le shell de l'explorateur le lit à son adresse. De là, il est envoyé à chaque session cmd.exe.
SET affecte uniquement l'environnement cmd. SETX vous permet de modifier l'environnement maître, mais le paramètre n'est pas reflété dans l'environnement local.
CONSET et 4NT de Frank Westlake peuvent récupérer les entrées du registre, mais pas de commutateurs pour l'environnement maître en particulier.
Les fenêtres normalement chargées gardent une trace des paramètres du registre, contrairement à celle chargée via minint (c'est-à-dire WinPE). Ainsi, la définition du registre et la lecture du registre fonctionnent dans les deux, mais seules les fenêtres normalement démarrées verront les paramètres et les transmettront à un nouveau programme cmd, exe.
cela dépend où vous "définissez" vos variables d'environnement. l'équivalent de votre exemple bash serait comme ceci:
fichier: env.bat
set FOO=bar
et maintenant tu le rafraîchis
% call env.bat
mais je pense que vous l'avez fait via le dialogue windows-system-settings-dialog (ou quel que soit son nom). le résultat de cela est que vous avez réellement modifié le registre. ces paramètres de registre sont mappés dans le processus lorsque vous lancez un nouveau processus.
vous pouvez donc soit démarrer un nouveau processus (cmd.exe dans votre cas) OU vous pouvez lire les clés de registre reflétant les modifications souhaitées. vous pouvez également écrire un petit script .bat / .cmd qui récupère l'environnement à partir du registre et modifie l'accord en cours sur l'environnement (si l'ambiance me frappe, je le ferai après le déjeuner).
C'est maintenant beaucoup plus facile, plus besoin de redémarrer le shell:
RefreshEnv.bat
RefreshEnv.bat
Observez que vos variables d'environnement nouvellement ajoutées sont disponibles dans toute nouvelle instance Command / Powershell, vérifiant l'actualisation.