Como posso obter variáveis de ambiente e, se algo estiver faltando, defina o valor?
Como posso obter variáveis de ambiente e, se algo estiver faltando, defina o valor?
Respostas:
Use a classe System.Environment .
Os métodos
var value = System.Environment.GetEnvironmentVariable(variable [, Target])
e
System.Environment.SetEnvironmentVariable(variable, value [, Target])
fará o trabalho para você.
O parâmetro opcional Target
é um enum do tipo EnvironmentVariableTarget
e pode ser um dos seguintes: Machine
, Process
ou User
. Se você o omitir, o destino padrão é o processo atual.
EnvironmentVariableTarget.Machine
requer acesso de administrador?
Eu me deparei com isso enquanto trabalhava em um aplicativo de console .NET para ler a variável de ambiente PATH e descobri que o uso de System.Environment.GetEnvironmentVariable expandirá as variáveis de ambiente automaticamente.
Eu não queria que isso acontecesse ... isso significa que pastas no caminho como '% SystemRoot% \ system32' estavam sendo reescritas como 'C: \ Windows \ system32'. Para obter o caminho não expandido, eu tive que usar isso:
string keyName = @"SYSTEM\CurrentControlSet\Control\Session Manager\Environment\";
string existingPathFolderVariable = (string)Registry.LocalMachine.OpenSubKey(keyName).GetValue("PATH", "", RegistryValueOptions.DoNotExpandEnvironmentNames);
Caiu como uma luva para mim.
Obter e definir
Obter
string getEnv = Environment.GetEnvironmentVariable("envVar");
Conjunto
string setEnv = Environment.SetEnvironmentVariable("envvar", varEnv);
Isso funcionará para uma variável de ambiente que é a configuração da máquina. Para Usuários, basta alterar para Usuário.
String EnvironmentPath = System.Environment
.GetEnvironmentVariable("Variable_Name", EnvironmentVariableTarget.Machine);
Environment.SetEnvironmentVariable("Variable name", value, EnvironmentVariableTarget.User);
EnvironmentVariableTarget.Machine
.
Eu poderia atualizar a variável de ambiente usando o seguinte
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);