Como faço para obter e definir variáveis ??de ambiente em C #?
-
06-07-2019 - |
Pergunta
Como posso obter variáveis ??de ambiente e se algo está faltando, defina o valor?
Solução
Use a System.Environment classe.
Os métodos
var value = System.Environment.GetEnvironmentVariable(variable [, Target])
e
System.Environment.SetEnvironmentVariable(variable, value [, Target])
irá fazer o trabalho para você.
O parâmetro Target
opcional é um enum do tipo EnvironmentVariableTarget
e pode ser um dos seguintes: Machine
, Process
, ou User
. Se você omiti-lo, o destino padrão é o processo atual .
Outras dicas
Eu corri para este enquanto trabalhava em um aplicativo de console .NET para ler a variável de ambiente PATH, e descobriram que o uso System.Environment.GetEnvironmentVariable irá expandir as variáveis ??de ambiente automaticamente.
Eu não queria que isso acontecesse ... isso significa pastas no caminho, como '% SystemRoot% \ system32' estavam sendo re-escrito como 'C: \ Windows \ system32'. Para obter o caminho expandiu-un, eu tive que usar este:
string keyName = @"SYSTEM\CurrentControlSet\Control\Session Manager\Environment\";
string existingPathFolderVariable = (string)Registry.LocalMachine.OpenSubKey(keyName).GetValue("PATH", "", RegistryValueOptions.DoNotExpandEnvironmentNames);
Trabalhou como um encanto para mim.
Isto irá funcionar para uma variável de ambiente que é a configuração da máquina. Para os usuários, basta mudar para Usuário vez.
String EnvironmentPath = System.Environment
.GetEnvironmentVariable("Variable_Name", EnvironmentVariableTarget.Machine);
get e set
Obter
string getEnv = Environment.GetEnvironmentVariable("envVar");
Set
string setEnv = Environment.SetEnvironmentVariable("envvar", varEnv);
Environment.SetEnvironmentVariable("Variable name", value, EnvironmentVariableTarget.User);
Eu poderia ser capaz de atualizar a variável de ambiente usando a 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);