2012-03-19 63 views
8

Tengo un problema con la configuración de variables de entorno con C#.C# establecer la variable de entorno

Necesito modificar algunas variables de entorno en algunas circunstancias. Por ejemplo, necesito modificar la variable NDSRC.

que utilizo:

Environment.SetEnvironmentVariable("MY_VARIABLE", "value", EnvironmentVariableTarget.Machine); 

Esto funciona bien.

A continuación, ejecuto un script que utiliza la variable. Y ahora hay un problema, porque el script no ve la variable.

Ejemplo: variables Establecer ruta (añadir un directorio al final) usando

string path = Environment.GetEnvironmentVariable("Path", EnvironmentVariableTarget.Machine) + ";c:\\"; 
Environment.SetEnvironmentVariable("Path", path, EnvironmentVariableTarget.Machine); 

Abra las ventanas de línea de comandos (Inicio> Run-> cmd.exe).

En comando cmd tipo de línea

El sistema no puede encontrar cmd.exe: 'cmd' no se reconoce como un comando interno o externo, programa o archivo por lotes.

Si verifica la configuración de Windows -> Variables del entorno, la Ruta se establece correctamente en el nuevo valor. Si marca en el símbolo del sistema abierto, también está configurado.

Respuesta

4

Lamentablemente, debe reiniciar el proceso para poder actualizar las variables de entorno. Vea esto MSDN post.

+1

Hola. Ese no es el problema. Yo uso Environment.SetEnvironmentVariable ("MY_VARIABLE", "value", EnvironmentVariableTarget.Process); para establecer la variable de entorno para mi proceso, y funciona. El problema es que fuera de mi proceso, incluso si veo una variable modificada, cualquier otro proceso parece no verlo. En el ejemplo, simplemente agrego algo a la variable Path. Después de eso, el sistema no ve la ruta variable en absoluto. –

1

Es por diseño que las variables se heredan cuando se inicia el proceso, y permanecen corregidas después de eso.

Sin embargo, no hay ninguna razón por la que no pueda simplemente ingresar periódicamente a las claves de registro relevantes y actualizar manualmente las variables de entorno de su proceso. De hecho, esto es the right thing to do si está buscando valores actualizados.

Básicamente, el registro almacena una plantilla para variables de entorno, y eso es lo que edita a través de "Configuración de Windows -> Variables de entorno". Cuando haces eso, Windows transmite un mensaje a todas las partes interesadas. Cualquiera de esas partes puede volver a crear su copia de las variables de entorno del registro.

No conozco ninguna función preconfigurada que pueda llamar para realizar esta recreación, sin embargo, por lo que probablemente tenga que escribir la suya propia.

+0

Hay un problema con la configuración de las variables de env con 'Environment.SetEnvironmentVariable' –

+0

He encontrado una solución: desde el proceso de creación de código (cmd.exe). En este proceso ejecute el comando "setx/M Variable Value". Esto modificará la variable env global y no causará el problema. –

+0

@ user641426: Global * cualquier cosa * tiende a causar un problema con el tiempo. –

Cuestiones relacionadas