2010-01-23 7 views
17
  • Windows 7.
  • C'est pour ma propre machine, donc cela n'a pas d'importance si elle nécessite des droits d'administrateur ou autre chose.
  • De préférence en Python ou .NET, mais je peux apprendre un peu de programmation Win32 (C/C++) si nécessaire.

Répondre

20

si vous voulez variable d'environnement définie de façon permanente, vous pouvez insérer la nouvelle valeur dans Registre. par exemple avec vbscript, ajoutez le chemin « c: \ test » dans la variable PATH

Set WshShell = WScript.CreateObject("WScript.Shell") 
strReg = "HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\Environment\Path" 
strSetting = WshShell.RegRead(strReg) 
strNewSetting = strSetting&";c\test" 
WshShell.RegWrite strReg, strNewSetting 

Donc, si vous utilisez Python ou d'autres langues, vous pouvez faire la même chose en utilisant propre api/modules de votre langue pour lire et écrire Registre

+1

Sauvegardez simplement cela sous .vbs et lancez-le. –

2

Utilisez la classe environnement comme celui-ci:

Environment.SetEnvironmentVariable("foo", "bar"); 
+0

J'ai oublié de mentionner, est-ce que c'est juste pour la durée du programme ou est-ce permanent? – Javier

+0

Cela n'affectera que l'environnement de programme actuel. Les modifications à l'échelle du système se trouvent dans le registre (voir la réponse de ghostdog) et nécessitent que le programme soit relancé après avoir effectué le changement. – Joshua

-3

La modification de variables d'environnement par programmation concerne uniquement la durée du programme. Je n'ai pas entendu parler de modifier réellement l'environnement à l'échelle du système et de le rendre efficace ici et là. Je ne pense pas que cela puisse être fait, cela exigerait de fouiller à un niveau privilégié et éventuellement de jouer avec le système de base pour y parvenir.

Même sous Unix, cela ne peut pas être fait malgré certains hacks pour y parvenir. Je me souviens d'avoir vu un code qui modifiait réellement les variables d'environnement sous MSDOS, en modifiant la structure de données de l'environnement _psp de MSDOS, mais c'était un système monotâche et 16 bits sans aucune protection. Pour résumer, je ne pense pas que vous le puissiez et il serait imprudent de le faire, il pourrait être perçu comme si le système était sous la menace d'un 'cheval de Troie' ou d'un 'virus' pour ce faire, pas seulement que, en tant qu'utilisateur, je ne voudrais pas qu'un programme modifie la variable d'environnement du système sans mon consentement! Bien sûr, un programme peut écrire au registre pour le rendre permanent, mais j'aimerais quand même savoir quel est le but et pourquoi.

+1

Jetez un coup d'œil à [this] (http://msdn.microsoft.com/fr-fr/library/windows/desktop/ms682653 (v = vs.85) .aspx) pour une variable d'environnement de jeu de méthodes qui colle. -1 pour FUD. – ssc

8

En C# ce qui suit crée une variable d'environnement permanent:

Environment.SetEnvironmentVariable("foo", "bar", EnvironmentVariableTarget.Machine); 
+0

Est-ce que cela deviendra permanent? – Javier

+1

Cela dépend de la valeur de l'énumération EnvironmentVariableTarget utilisée. Voir http://msdn.microsoft.com/en-us/library/system.environmentvariabletarget.aspx – kicsit

+0

ma fenêtre de débogage se bloque lorsque j'ajoute "EnvironmentVariableTarget.Machine" –

5

ou vous pouvez essayer un script Windows PowerShell; PowerShell est installé sur Windows 7 par défaut.

course powershell.exe

PS C:\> [Environment]::SetEnvironmentVariable("TestVariable", "Test value.", "User") 

Ensuite, par exemple, de cmd.exe

Microsoft Windows [Version 6.1.7601] 
Copyright (c) 2009 Microsoft Corporation. All rights reserved. 

C:\>echo %TestVariable% 
Test value. 

C:\> 

Or (dans une nouvelle) Powershell.exe

PS C:\> echo $ENV:TestVariable 
Test Value. 
PS C:\> 

départ http://technet.microsoft.com/en-us/library/ff730964.aspx

+0

Cela fonctionne comme décrit, mais un shell DOS est déjà ouvert lorsque la variable env est définie ne semble pas ramasser la modification, donc apparemment, le PowerShell ne diffuse pas un message 'WM_SETTINGCHANGE' comme décrit [ici] (http://msdn.microsoft.com/en-us/library/ windows/desktop/ms725497 (v = vs.85) .aspx). Bon début cependant. – ssc

4

F ou quelqu'un d'autre à la recherche d'une réponse rapide commandline

SETX est disponible sur les serveurs Windows (en mode natif, je pense - http://technet.microsoft.com/en-us/library/cc755104.aspx)

Il est également disponible dans le Windows 7 et 8 toolkit.

+1

+1 Plus simple que la réponse précédente et fonctionne sur win7 ultimate too – daitangio

+0

setx.exe ne pouvait pas être un outil pire pour étendre 'Path'. Les valeurs de l'utilisateur et du système 'Path' ne devraient jamais être confondues, et les variables en pourcentage dans une valeur' REG_EXPAND_SZ' devraient rester non étendues. setx.exe ne peut pas faire cela. Qu'est-ce qu'il peut faire est de faire un gâchis horrible qui ne peut être défait. – eryksun

+0

ne nous blâme pas pour vouloir utiliser la ligne de commande fournie par Microsoft: Description: Crée ou modifie des variables d'environnement dans l'environnement utilisateur ou système . Peut définir des variables basées sur des arguments, des regkeys ou entrée de fichier. – user1885834

Questions connexes