Как получить и установить переменные среды в C#?

Как я могу получить переменные среды и, если чего-то не хватает, установить значение?

Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
196
0
199 813
7
Перейти к ответу Данный вопрос помечен как решенный

Ответы 7

Ответ принят как подходящий

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

Методы

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

и

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

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

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

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

Lessan Vaezi 13.02.2011 15:45

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

checksum 11.02.2014 10:45

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

Erez A. Korn 13.05.2015 07:19

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

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

Я столкнулся с этим, когда работал над консольным приложением .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);

Сработало для меня как шарм.

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

Tono Nam 18.04.2013 19:07

Ответ @TonoNam Патрика работает на моей машине с правами администратора без. Обратите внимание, что для настройки переменной среды System требуются права администратора (конечно).

Franklin Yu 31.10.2018 03:33

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

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

Daniel Bonetti 26.09.2013 20:08

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

Получить

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

Набор

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

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

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

Если целью чтения переменной среды является переопределение значений в appsetting.json или любом другом файле конфигурации, вы можете заархивировать его с помощью EnvironmentVariablesExtensions.

var builder = new ConfigurationBuilder()
                .AddJsonFile("appSettings.json")
                .AddEnvironmentVariables(prefix: "ABC_")

var config = builder.Build();

Согласно этому примеру URL-адрес среды считывается из appsettings.json. но когда строка AddEnvironmentVariables(prefix: "ABC_") добавляется в ConfigurationBuilder, значение appsettings.json будет переопределено в значении переменной среды.

Другие вопросы по теме