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


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.


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.


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

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

6
Environment.SetEnvironmentVariable("Variable name", value, EnvironmentVariableTarget.User);

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);
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.