2010-01-23 19 views
17
  • Windows 7.
  • Es para mi propia máquina, por lo que no importa si requiere derechos de administrador o algo así.
  • Preferentemente en Python o .NET, pero puedo aprender un poco de programación Win32 (C/C++) si es necesario.

Respuesta

20

si desea establecer permanentemente variable de entorno, puede insertar el nuevo valor en el registro. por ejemplo, con VBScript, agregue la ruta "C: \ test" en 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 

Por lo tanto, si se utiliza Python u otros idiomas, se puede hacer lo mismo usando propia API/módulos de su idioma para leer y escribir registro

+1

Simplemente guarde esto como .vbs y ejecútelo. –

2

utilizar la clase entorno como este:

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

Olvidé mencionarlo, ¿es solo por la duración del programa o es permanente? – Javier

+0

Solo afectará el entorno del programa actual. Los cambios en todo el sistema están en el registro (ver la respuesta de ghostdog) y requieren que el programa sea relanzado después de realizar el cambio. – Joshua

-3

La modificación de las variables de entorno mediante programación solo se aplica a la duración del programa. No he oído hablar de modificar el medio ambiente en todo el sistema y hacerlo efectivo allí mismo. No creo que se pueda hacer eso, eso requeriría hurgar a un nivel privilegiado y posiblemente jugar con el sistema central para lograr eso.

Incluso bajo Unix, no se puede hacer a pesar de algunos hacks para lograrlo. Recuerdo ver código que realmente modificó las variables de entorno en MSDOS, alterando la estructura de datos del entorno _psp de MSDOS, pero que era un sistema de tarea única y 16 bits sin protección alguna.

En resumen, no creo que pueda hacerlo y no sería prudente hacerlo, podría parecer que el sistema está bajo la amenaza de un 'troyano' o un 'virus' como resultado si intenta para hacerlo, no solo que, como usuario, no me gustaría que un programa modifique la variable de entorno del sistema sin mi consentimiento. Claro, un programa puede escribir en el registro para hacerlo permanente, pero aún me gustaría saber cuál es el propósito y por qué.

+1

Eche un vistazo a [this] (http://msdn.microsoft.com/en-us/library/windows/desktop/ms682653 (v = vs.85) .aspx) para una variable de entorno de conjunto de métodos que se adhiere. -1 para FUD. – ssc

8

En C# la siguiente crea una variable de entorno permanente:

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

¿Esto se convertirá en permanente? – Javier

+1

Depende del valor de la enumeración de EnvironmentVariableTarget utilizada. Ver http://msdn.microsoft.com/en-us/library/system.environmentvariabletarget.aspx – kicsit

+0

mi ventana de depuración se bloquea cuando agrego en "EnvironmentVariableTarget.Machine" –

5

o usted podría intentar un script de Windows PowerShell; PowerShell está instalado en Windows 7 de manera predeterminada.

plazo powershell.exe

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

Entonces, por ejemplo, de cmd.exe

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

C:\>echo %TestVariable% 
Test value. 

C:\> 

O (en una nueva) PowerShell.exe cheque

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

cabo http://technet.microsoft.com/en-us/library/ff730964.aspx

+0

Esto funciona como se describe, pero un shell de DOS que ya está abierto cuando el env var está configurado no parece captar el cambio, aparentemente, PowerShell no transmite un mensaje 'WM_SETTINGCHANGE' como se describe aquí [http://msdn.microsoft.com/en-us/library/ windows/desktop/ms725497 (v = vs.85) .aspx). Buen comienzo sin embargo. – ssc

4

F o cualquier otra persona en busca de una respuesta rápida de comandos

SETX está disponible en los servidores Windows (nativa creo - http://technet.microsoft.com/en-us/library/cc755104.aspx)

Su también disponible en el Windows 7 y 8 toolkit.

+1

+1 Más simple que la respuesta anterior y funciona también en win7 ultimate – daitangio

+0

setx.exe no podría ser una herramienta peor para extender 'Path'. Los valores de 'Ruta' del usuario y del sistema nunca deben combinarse, y las variables de porcentaje en un valor 'REG_EXPAND_SZ' no deben expandirse. setx.exe no puede hacer nada de esto. Lo que puede hacer es crear un desastre horrible que no se puede deshacer. – eryksun

+0

no nos culpe por querer usar la línea de comando proporcionada por microsoft: Descripción: Crea o modifica las variables de entorno en el entorno del usuario 0 del sistema . Puede establecer variables basadas en argumentos, regkeys o entradas de archivos . – user1885834

Cuestiones relacionadas