Pregunta

¿Cómo puedo obtener variables de entorno y si falta algo, establezca el valor?

¿Fue útil?

Solución

Utilice 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 usted.

El parámetro opcional Target es una enumeración de tipo EnvironmentVariableTarget y puede ser uno de los siguientes: Machine , Process o Usuario . Si lo omite, el objetivo predeterminado es el proceso actual.

Otros consejos

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í.

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);

Obtener y configurar

Obtener

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

Set

string setEnv = Environment.SetEnvironmentVariable("envvar", varEnv);
Environment.SetEnvironmentVariable("Variable name", value, EnvironmentVariableTarget.User);

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);
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top