Respuestas:
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.
EnvironmentVariableTarget.MachineRequiere acceso de administrador?
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í.
Obtener y establecer
Obtener
string getEnv = Environment.GetEnvironmentVariable("envVar");
Conjunto
string setEnv = Environment.SetEnvironmentVariable("envvar", varEnv);
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);
Environment.SetEnvironmentVariable("Variable name", value, EnvironmentVariableTarget.User);
EnvironmentVariableTarget.Machinelugar.
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);