¿Cómo obtengo y configuro las variables de entorno en C #?

Respuestas:

258

Use la clase System.Environment .

Los métodos

var value = System.Environment.GetEnvironmentVariable(variable [, Target])

y

System.Environment.SetEnvironmentVariable(variable, value [, Target])

hará el trabajo por ti.

El parámetro opcional Targetes una enumeración de tipo EnvironmentVariableTargety puede ser uno de: Machine, Processo User. Si lo omite, el objetivo predeterminado es el proceso actual.

Patrick Desjardins
fuente
37
También tenga en cuenta el tercer parámetro opcional: System.Environment.SetEnvironmentVariable (variable, valor, EnvironmentVariableTarget ) Los valores posibles son: Máquina , Proceso y Usuario
Lessan Vaezi
1
¿ EnvironmentVariableTarget.MachineRequiere acceso de administrador?
suma de comprobación del
Sí lo hace Intentar ejecutarlo sin resultará en una excepción obvia.
Erez A. Korn
30

Me encontré con esto mientras trabajaba en una aplicación de consola .NET para leer la variable de entorno PATH, y descubrí que usar System.Environment.GetEnvironmentVariable expandirá las variables de entorno automáticamente.

No quería que eso sucediera ... eso significa que las carpetas en la ruta como '% SystemRoot% \ system32' se estaban reescribiendo como 'C: \ Windows \ system32'. Para obtener la ruta no expandida, tuve que usar esto:

string keyName = @"SYSTEM\CurrentControlSet\Control\Session Manager\Environment\";
string existingPathFolderVariable = (string)Registry.LocalMachine.OpenSubKey(keyName).GetValue("PATH", "", RegistryValueOptions.DoNotExpandEnvironmentNames);

Funcionó como un encanto para mí.

Nathan Bedford
fuente
77
+1 Tuve que usar esta solución porque la otra respuesta de Patrick Desjardins me exigió tener privilegios de administrador. ¡Pude leer el valor de la variable de entorno sin tener privilegios de administrador con esta solución!
Tono Nam
La respuesta de @TonoNam Patrick funciona en mi máquina sin privilegios de administrador. Tenga en cuenta que la configuración de la variable de entorno del sistema requiere privilegios de administrador (por supuesto).
Franklin Yu
16

Obtener y establecer

Obtener

string getEnv = Environment.GetEnvironmentVariable("envVar");

Conjunto

string setEnv = Environment.SetEnvironmentVariable("envvar", varEnv);
Tom Stickel
fuente
14

Esto funcionará para una variable de entorno que es la configuración de la máquina. Para los usuarios, simplemente cambie a Usuario en su lugar.

String EnvironmentPath = System.Environment
                .GetEnvironmentVariable("Variable_Name", EnvironmentVariableTarget.Machine);
SpeedyNinja
fuente
6
Environment.SetEnvironmentVariable("Variable name", value, EnvironmentVariableTarget.User);
Karthik Chintala
fuente
1
Si desea que su variable PATH sea de uso permanente en su EnvironmentVariableTarget.Machinelugar.
Daniel Bonetti
0

Podría actualizar la variable de entorno utilizando lo siguiente

string EnvPath = System.Environment.GetEnvironmentVariable("PATH", EnvironmentVariableTarget.Machine) ?? string.Empty;
if (!string.IsNullOrEmpty(EnvPath) && !EnvPath .EndsWith(";"))
    EnvPath = EnvPath + ';';
EnvPath = EnvPath + @"C:\Test";
Environment.SetEnvironmentVariable("PATH", EnvPath , EnvironmentVariableTarget.Machine);
Ajit
fuente