Як отримати та встановити змінні середовища у C #?


Відповіді:


258

Використовуйте клас System.El Environment .

Методи

var value = System.Environment.GetEnvironmentVariable(variable [, Target])

і

System.Environment.SetEnvironmentVariable(variable, value [, Target])

зробить роботу за вас.

Необов'язковий параметр Targetявляє собою перерахування типу , EnvironmentVariableTargetі він може бути одним з: Machine, Process, або User. Якщо ви його опустите, ціль за замовчуванням - це поточний процес.


37
Також зверніть увагу на необов'язковий третій параметр: System.Environment.SetEnvironmentVariable (змінна, значення, EnvironmentVariableTarget ) Можливі значення: Машина , процес та користувач
Lessan Vaezi

1
Чи 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);

Працювало як шарм для мене.


7
+1 Мені довелося скористатися цим рішенням, оскільки інший, на який відповів Патрік Дежардінс, вимагав від мене адміністраторських прав. Я зміг прочитати значення змінної середовища, не маючи привілеїв адміністратора з цим рішенням!
Тоно Нам

@TonoNam Відповідь Патріка працює на моїй машині без прав адміністратора. Зауважте, що для встановлення змінної системного середовища потрібні (звичайно) права адміністратора.
Франклін Ю

16

Отримайте та встановіть

Отримайте

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

Встановити

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

14

Це буде працювати для змінної середовища, яка є налаштуванням машини. Для користувачів просто замініть на Користувача.

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


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);
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.