Відповіді:
Використовуйте клас System.El Environment .
Методи
var value = System.Environment.GetEnvironmentVariable(variable [, Target])
і
System.Environment.SetEnvironmentVariable(variable, value [, Target])
зробить роботу за вас.
Необов'язковий параметр Target
являє собою перерахування типу , EnvironmentVariableTarget
і він може бути одним з: Machine
, Process
, або User
. Якщо ви його опустите, ціль за замовчуванням - це поточний процес.
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);
Працювало як шарм для мене.
Отримайте та встановіть
Отримайте
string getEnv = Environment.GetEnvironmentVariable("envVar");
Встановити
string setEnv = Environment.SetEnvironmentVariable("envvar", varEnv);
Це буде працювати для змінної середовища, яка є налаштуванням машини. Для користувачів просто замініть на Користувача.
String EnvironmentPath = System.Environment
.GetEnvironmentVariable("Variable_Name", EnvironmentVariableTarget.Machine);
Environment.SetEnvironmentVariable("Variable name", value, EnvironmentVariableTarget.User);
EnvironmentVariableTarget.Machine
.
Я зміг би оновити змінну середовища, скориставшись наступним
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);