Como obtenho e defino variáveis ​​de ambiente em c #?

190

Como posso obter variáveis ​​de ambiente e, se algo estiver faltando, defina o valor?

Senhor Dev
fonte

Respostas:

256

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 EnvironmentVariableTargete pode ser um dos seguintes: Machine, Processou User. Se você o omitir, o destino padrão é o processo atual.

Patrick Desjardins
fonte
37
Observe também o terceiro parâmetro opcional: System.Environment.SetEnvironmentVariable (variável, valor, EnvironmentVariableTarget ) Os valores possíveis são: Máquina , Processo e usuário
Lessan Vaezi
1
Será que EnvironmentVariableTarget.Machinerequer acesso de administrador?
checksum
Sim. Tentar executá-lo sem resultará em uma exceção óbvia.
Erez A. Korn
30

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.

Nathan Bedford
fonte
7
+1 Eu tive que usar esta solução porque a outra resposta de Patrick Desjardins exigia que eu tivesse privilégios de administrador. Consegui ler o valor da variável de ambiente sem ter privilégios de administrador com esta solução!
Tono Nam
@TonoNam A resposta de Patrick funciona na minha máquina sem privilégios de administrador. Observe que a configuração da variável de ambiente do sistema requer privilégios de administrador (é claro).
Franklin Yu
16

Obter e definir

Obter

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

Conjunto

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

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);
SpeedyNinja
fonte
6
Environment.SetEnvironmentVariable("Variable name", value, EnvironmentVariableTarget.User);
Karthik Chintala
fonte
1
Se você deseja que sua variável PATH seja permanente, use-a EnvironmentVariableTarget.Machine.
22713 Daniel Bonetti
0

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