Actualiser la variable d'environnement

12

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"

Don Ch
la source
Il y a une bonne réponse à la même question sur Stackoverflow.
Hugh Allen
Fermez la console et ouvrez-en une nouvelle.
Synetech

Réponses:

4

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.

Chris Crutchfield
la source
1

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.

wendy.krieger
la source
0

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

akira
la source
0

C'est maintenant beaucoup plus facile, plus besoin de redémarrer le shell:

  1. Ouvrez le menu Démarrer et recherchez RefreshEnv.bat
  2. Courir RefreshEnv.bat

Observez que vos variables d'environnement nouvellement ajoutées sont disponibles dans toute nouvelle instance Command / Powershell, vérifiant l'actualisation.

Lance McCarthy
la source
Que voulez-vous dire maintenant? Depuis quelle version? Ce fichier bat est-il disponible avec Windows?
Máté Juhász