2008-10-08 2 views

ответ

192

Используйте класс System.Environment.

Метод

System.Environment.GetEnvironmentVariable() 

и

System.Environment.SetEnvironmentVariable() 

будет делать работу за вас.

+33

отметить также необязательный третий параметр: System.Environment.SetEnvironmentVariable (переменная, значение, ** EnvironmentVariableTarget **) Возможные значения: * машина *, * Процесс * и * Пользователь * –

+1

ли ' EnvironmentVariableTarget.Machine' требует доступа администратора? – checksum

+0

Да, это так. Попытка запустить его без этого приведет к очевидному исключению. –

8

Это будет работать для переменной среды, которая является установкой машины. Для пользователей просто измените на пользователя.

String EnvironmentPath = System.Environment 
       .GetEnvironmentVariable("Variable_Name", EnvironmentVariableTarget.Machine); 
30

Я столкнулся с этим во время работы над приложением .NET консоли для чтения переменной среды PATH, и обнаружил, что использование System.Environment.GetEnvironmentVariable автоматически увеличит переменные среды.

Я не хотел, чтобы это произошло ... это означает, что папки на пути, такие как «% SystemRoot% \ system32», переписывались как «C: \ Windows \ system32». Чтобы получить нерасширенный путь, я должен был использовать это:

string keyName = @"SYSTEM\CurrentControlSet\Control\Session Manager\Environment\"; 
string existingPathFolderVariable = (string)Registry.LocalMachine.OpenSubKey(keyName).GetValue("PATH", "", RegistryValueOptions.DoNotExpandEnvironmentNames); 

Работал как очарование для меня.

+5

+1 Я должен был использовать это решение, потому что другой, на который ответил Патрик Дежардинс, потребовал, чтобы у меня были права администратора. Я смог прочитать значение переменной окружения без привилегий администратора с этим решением! –

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

Если вы хотите, чтобы ваша переменная PATH была постоянной, используйте вместо нее «EnvironmentVariableTarget.Machine». –

6

Получить и Установить

Получить

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

Набор

string setEnv = Environment.SetEnvironmentVariable("envvar", varEnv); 
0

Я мог бы быть в состоянии обновить переменную окружения с помощью следующей

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); 
Смежные вопросы