Comment ajouter une variable d'environnement Windows sans redémarrer?

181

J'aimerais ajouter une variable d'environnement à une machine Windows (poste de travail ou serveur) et pouvoir l'utiliser sans redémarrer cette machine.

Supposons que votre serveur de production héberge diverses applications et qu'une nouvelle application nécessite l'exécution d'une variable d'environnement particulière. Vous ne souhaitez pas le redémarrer lorsque les utilisateurs sont connectés à vos autres applications. Quels choix as-tu? Je n'aime pas l'option d'attendre le bon moment pour redémarrer. Il doit y avoir un meilleur moyen. Qu'est-ce que je rate?

Chad Braun-Duin
la source
2
J'ai eu le même problème. J'ai lu quelque part que tuer le processus explorer.exe mettrait à jour les variables et que cela fonctionnerait. Ensuite, il me suffisait de lancer l'explorateur à partir du gestionnaire de tâches.
user19694
1
Vous devez fermer l'invite de commande et la rouvrir à nouveau pour que vos variables de chemin soient mises à jour. Les variables sont chargées au démarrage de cmd.
NiLInfinite

Réponses:

162

Les modifications apportées aux variables d'environnement doivent prendre effet immédiatement si vous effectuez ces modifications via la boîte de dialogue Propriétés principale de l'ordinateur en question (sous Poste de travail | Propriétés | Avancé | Variables d'environnement). Une fois les modifications enregistrées, Explorer envoie un WM_SETTINGCHANGEmessage à toutes les fenêtres pour les informer de la modification. Tous les programmes créés via Explorer après cette opération doivent obtenir l'environnement mis à jour, mais pas les programmes déjà en cours d'exécution, à moins qu'ils ne gèrent le message de modification des paramètres.

Je ne suis pas en mesure de dire à partir de la description de votre problème quel problème spécifique vous rencontrez. Pouvez-vous nous en dire plus sur le scénario spécifique qui ne fonctionne pas?

Cet article de la Base de connaissances peut également être utile: Comment propager des variables d’environnement au système

Charlie
la source
2
Ok, je suppose que j'ai dû voir ce comportement sur un service en cours d'exécution ou quelque chose du genre. J'ai ajouté une nouvelle variable d'environnement en utilisant la méthode décrite ci-dessus. Ensuite, j'ai pu voir la valeur après avoir ouvert une nouvelle invite de commande et utilisé la commande "echo% <myvar>%". Merci à vous deux pour vos réponses.
Chad Braun-Duin,
5
Pour les utilisateurs de PowerShell, cet extrait peut être utile: poshcode.org/2049
Anders Zommarin
8
Si vous utilisez cmd, vous devez le redémarrer si changez la variable env
Neil McGuigan
4
Je viens d’installer Scala sur mon PC mais le PATH n’a pas été mis à jour; vraisemblablement, le MSI n'a pas diffusé le message WM_SETTINGCHCHANGE. J'ai ajouté une variable système factice, à savoir CHANGE_TO_UPDATE = z, que je mets à jour pour déclencher le message WM_SETTINGCHCH - Problème résolu
Darren Bishop, le
3
404 pour le lien :-(
Samoth
63
  1. Dans une invite de commande, tapez: runas /user:yourusername@yourdomain cmd
  2. Il va ouvrir une nouvelle invite de commande, puis tapez: taskkill /f /im explorer.exe
  3. Puis tapez: explorer.exe

Maintenant, après avoir fermé toutes les invites de commande, vous verrez que la PATHvariable a été réellement mise à jour.

Toutes les invites de commande doivent être fermées. Rouvrez une nouvelle invite de commande, tapez chemin et vous verrez les nouvelles données.

Ron AndKim Stengel
la source
6
De toutes les réponses sur cette page, c'est la seule qui a réellement fonctionné pour moi. Je vous remercie!!
Coredumperror
2
Cela a fonctionné pour moi. Je pense que le problème est que si vous exécutez cmd via explorer (pour vous éviter de devoir taper de longs chemins), alors explorer n'est jamais fermé, même si vous fermez toutes les fenêtres de l'explorateur. Merci pour la solution :)
Steve Mc
Travaillé pour moi Vous pouvez également simplement utiliser le Gestionnaire des tâches pour supprimer les tâches de l’explorateur et le redémarrer (Fichier> Exécuter une nouvelle tâche).
Adabyron
7
Euh S'il vous plaît, ne tuez pas l'explorateur Windows sauf si l'un de ses processus est bloqué. Au lieu de cela, ouvrez la boîte de dialogue des fenêtres d’arrêt et annulez-la en maintenant ctrl+alt+shift. Cela quittera proprement l'explorateur Windows. Dans Vista +, le dialogue des fenêtres d'arrêt est plus difficile à trouver (mais reste présent, au moins jusqu'à 7 (incertain sur 8 et 10)), il existe donc une deuxième méthode. Ctrl + Maj + clic droit dans une partie vide du menu Démarrer et choisissez quitter l'explorateur. Dans 8 l'option de sortie est la même, mais vous utilisez la barre des tâches pas le menu Démarrer.
Kevin Cathcart
1
+1 Cela fonctionne comme un charme sur Windows 7. À titre d'information, j'ai simplement utilisé les touches CTRL + ALT + MAJ et à partir du gestionnaire de tâches Windows, j'ai tué tous les processus explorer.exe et je l'ai redémarré en appuyant sur le bouton Nouvelle tâche .
Marco Demaio
19

Il convient de garder à l'esprit que de nombreux programmes obtiennent les variables d'environnement lors de leur premier démarrage. Par conséquent, bien que Windows n'ait pas besoin de redémarrer, certains programmes peuvent avant de pouvoir utiliser les nouvelles variables. Un bon exemple en est la nécessité d’ouvrir une nouvelle fenêtre d’invite de commande après l’ajout d’un PATH (oui, j’ai été déclenché par cela).

nedm
la source
3
Ce problème affecte TOUS LES SERVICES, même un service redémarré ne verra pas les nouvelles variables d'environnement.
Gimel
1
Êtes-vous sûr que ce n'est pas à cause du partage d'un processus svchost?
Mark Sowul
16

Même si je n'ai pas assez de réputation pour commenter la réponse la plus votée à cette question, je voudrais dire que ce n'est pas tout à fait correct. Je le sais parce que, quelle que soit la solution de contournement que j'ai essayée dans ce post, rien ne fonctionnait réellement.

L' article kb associé à cette réponse indique en effet que:

Notez cependant que les modifications apportées aux variables d'environnement n'entraînent pas de changement immédiat. Par exemple, si vous démarrez une autre invite après avoir apporté les modifications, les variables d'environnement refléteront les valeurs précédentes (et non les valeurs actuelles). Les modifications ne prennent effet que lorsque vous vous déconnectez, puis vous reconnectez.

La partie concernant les variables d’environnement réinitialisées aux valeurs précédentes après le rechargement de l’invite de commande correspond exactement à ce que j’ai expérimenté dans Windows Server 2008.

L'article poursuit:

Pour effectuer ces modifications sans vous déconnecter, diffusez un message WM_SETTINGCHANGE dans toutes les fenêtres du système, de sorte que toutes les applications intéressées (telles que l'Explorateur Windows, le Gestionnaire de programmes, le Gestionnaire de tâches, le Panneau de configuration, etc.) puissent effectuer une mise à jour.

Cela n'implique pas que l'Explorateur diffuse un message WM_SETTINGCHANGE une fois que vous avez modifié les variables d'environnement système ou qu'il fonctionne réellement. Je ne sais pas comment vous feriez ce que l'article de la Base de connaissances vous propose (pour propager immédiatement les modifications) à partir de l'invite de commande.

testwork
la source
1
Ceci est la seule réponse qui me convient. Aucun des autres, y compris le fait de tuer Explorer à la dure ou la "bonne", ne fait aucune différence.
Hashim
4

Faire l'env. variable disponible tout de suite:

1. Open a shell

En fonction de la variable d'environnement que vous souhaitez modifier, procédez comme suit: (supposez que vous souhaitiez ajouter un nouveau PATH pour une application récemment installée). Ainsi, à l'invite du shell, tapez ce qui suit:

2. PATH=%PATH%;C:\type\your\new\path\here

vérifiez que votre nouveau chemin a été ajouté à la variable d'environnement

3. echo %PATH%

Terminé.

Rendre la variable disponible au redémarrage

1. Press WinLogoKey+Pause/Break
2. On the left pane, press 'Advanced System Settings'
3. On the 'Advanced' tab, click 'Environment Variables'
4. In 'System Variables' choose the one you want to modify
5. Click Ok

Testé et fonctionnant sous Windows 7/10

Pedro Sousa
la source
3

Une solution possible pour les services consiste à les exécuter temporairement en tant qu'utilisateur différent (autre que LocalSystem, LocalService, NetworkService). Par exemple, pour le service Apache, cela fonctionne sans aucun problème. Pour modifier le compte de service, ouvrez la console services.msc, sélectionnez service, cliquez sur Propriétés du service et, dans le deuxième onglet, entrez les informations d'identification de connexion d'un utilisateur. Redémarrez le service et ses variables d'environnement doivent être à jour.

S'il s'agit d'un utilisateur qui a été connecté, cela devrait fonctionner sans problème. Si vous utilisez le compte d'utilisateur actuel, il peut être nécessaire de redémarrer explorer.exe également. Notez également que l’exécution de services en tant que compte utilisateur normal peut créer des risques de sécurité.

Odin
la source
1

Les gens n'ayant pas encore ajouté cette réponse, je voulais mentionner que vous pouvez définir des variables système permanentes qui survivent au redémarrage avec la commande SETX.

par exemple

setx PATH "%PATH%;c:\temp\my\new\path"

Veuillez noter que ce qui précède ne fonctionnera pas dans la fenêtre de commande actuelle et vous demandera d’ouvrir une nouvelle fenêtre de commande avant qu’elle ne prenne effet. En conséquence, selon le cas d'utilisation; vous devrez peut-être combiner cela avec l'une des autres techniques ci-dessus.

Veuillez consulter l'URL suivante pour plus de détails :

Doug
la source
ne fonctionne pas: / "syntaxe invalide"
Joe DF
1
Essayez maintenant. Apparemment, il avait besoin de guillemets doubles.
Doug
Merci, oui, j'ai pensé ... sauf que je reçois un avertissement de troncature, donc je ne peux rien ajouter ... :(
Joe DF