Comment modifier la variable PATH certainement par le biais de la ligne de commande dans Windows
Je voudrais faire un .fichier bat qui permettrait d'ajouter une chaîne de caractères à la fin de la valeur de la variable PATH de Windows. Avertissement, je veux que cette modification est définitive, ne travaille pas uniquement pour la session en cours.
N'quelqu'un connais un moyen de faire cela ? Autant que possible, il ne devrait pas dépendre de la version de Windows
OriginalL'auteur madewulf | 2010-09-03
Vous devez vous connecter pour publier un commentaire.
Désolé pour la longue réponse, mais une réponse courte à votre question, c'est impossible.
Tout d'abord, vous devez comprendre comment les variables d'environnement œuvres. Il y a certains endroits dans le registre comme
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Environment
etHKEY_CURRENT_USER\Environment
où les variables d'environnement se tenir. Au démarrage du système d'exploitation lit ces clés de registre. Ensuite, un processus de windows crée un autre processus de windows. Le processus parent peut donner au client de traiter tout un ensemble de variables d'environnement. Si le processus parent ne fait pas cela, le processus fils hérite des variables d'environnement du processus parent.Pour être en mesure de mettre à jour les variables d'environnement d'un processus en cours d'exécution à l'égard de WM_WININICHANGE ou WM_SETTINGCHANGE messages. Une application windows peut interpréter ces messages et de relire les variables d'environnement de la base de registre
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Environment
etHKEY_CURRENT_USER\Environment
. De sorte que vous pouvez en général modifier les valeurs de registre en vertu de l'HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Environment
ouHKEY_CURRENT_USER\Environment
et envoyerIl serait beaucoup mieux d'utiliser SendMessageTimeout au lieu de SendMessage, mais l'idée reste la même. Le problème est que d'autres processus ne doit pas attendez que le message et de faire quelque chose. La plupart d'application de la console ont pas de boucle de message et de ne pas faire n'importe quoi, si vous envoyer de tels messages.
Donc, il est important de comprendre qu'il y pas moyen simple de mettre à jour les variables d'environnement de tous les processus sans redémarrage de l'ordinateur. Vous devriez avoir une compréhension claire de ce et de réduire un peu votre question.
Si vous mettez à jour l'environnement dans la base de registre et l'envoyer
SendMessage (HWND_BROADCAST, WM_SETTINGCHANGE, 0, (LPARAM)"Environment")
puis de nouveau traitées créé par Explorer.exe sera ont de nouvelles variables d'environnement, mais cmd.exe va pas le faire.Si vous souhaitez mettre à jour les variables d'environnement de l'actuel cmd.exe à l'intérieur d'un traitement par lots, vous pouvez effectuer les opérations suivantes: Vous pouvez créer un nouveau fichier CMD par exemple t.cmd dans le répertoire %TEMP%, écrire dans le fichier
SET PATH=%PATH%;C:\BlaBla
et ensuite utilisercall %TEMP%\t.cmd
etdell %TEMP%\t.cmd
de mettre à jour les variables d'environnement de l'actuel cmd.exe.Être exactement il y a plus d'endroits qui sont utilisés pour construire les variables d'environnement du nouveau processus. Ce sont des sous-clés de la clé
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\App Paths
et%SystemRoot%\System32\autoexec.nt
fichier. L'un sera utilisé pour les processus créés parShellExecute
etShellExecuteEx
(par exemple Explorer.exe) et un autre pour les applications de console.OriginalL'auteur Oleg
Si vous ne se soucient que de nouvelles instances de processus, et vous voulez vraiment être fait par l'intermédiaire d'un fichier de commandes, puis
setx
est ce que vous cherchez./M
va changer laPATH
dansHKEY_LOCAL_MACHINE
au lieu deHKEY_CURRENT_USER
.c'est à dire une variable système, au lieu de l'utilisateur.
exemple:
SETX /M PATH "%PATH%;C:\your path with spaces"
Si vous voulez directement modifier une variable d'environnement pour le processus en cours d'exécution, eh bien, oui, c'est compliqué et apparemment pas recommandé:
Sinon, comme Oleg dit, par programme, le meilleur moyen est de modifier la base de registre et envoyer
WM_SETTINGCHANGE
et j'espère que les applications sont assez gentil pour le ramasser./M
permettra de définir un système de variable à la place de la nouvelle variable utilisateur lors de la configuration dePATH
. Le syntaxe:SETX /M PATH "%PATH%;C:\your path with spaces"
2) Un inconvénient: toutes les variables du système à l'intérieur dePATH
va se résoudre, comme%SystemRoot%
(devientC:\Windows
), bien que je ne pense pas que c'est faux.OriginalL'auteur jrtipton