Pergunta

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

Foi útil?

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);
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top