C # установить переменную окружения - PullRequest
11 голосов
/ 19 марта 2012

У меня проблема с установкой переменных окружения с помощью C #.

Мне нужно изменить некоторые переменные окружения при некоторых обстоятельствах. Например, мне нужно изменить переменную NDSRC.

Я использую:

Environment.SetEnvironmentVariable("MY_VARIABLE", "value", EnvironmentVariableTarget.Machine);

Это отлично работает.

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

Пример: Задайте переменную Path (добавьте каталог в конце), используя

string path = Environment.GetEnvironmentVariable("Path", EnvironmentVariableTarget.Machine) + ";c:\\";
Environment.SetEnvironmentVariable("Path", path, EnvironmentVariableTarget.Machine);

Открыть командную строку Windows (Пуск-> Выполнить-> cmd.exe).

В командной строке введите cmd

Система не может найти cmd.exe: «cmd» не распознается как внутренняя или внешняя команда, работающая программа или пакетный файл.

Если вы проверите настройки Windows -> Переменные среды, путь будет правильно установлен на новое значение. Если вы проверяете открытую командную строку, она также устанавливается.

Ответы [ 2 ]

7 голосов
/ 19 марта 2012

К сожалению, вам нужно перезапустить процесс, прежде чем можно будет обновлять переменные среды.Смотрите это MSDN сообщение .

2 голосов
/ 19 марта 2012

По своей природе переменные наследуются при запуске процесса и остаются неизменными после этого.

Однако нет причины, по которой вы не можете просто периодически читать соответствующие ключи реестра иобновите переменные среды вашего процесса вручную из этого.На самом деле, это правильная вещь, которую нужно сделать , если вы используете самые последние значения.

По сути, реестр хранит шаблон для переменных средыи это то, что вы редактируете через «Настройки Windows -> Переменные среды».Когда вы делаете это, Windows передает сообщение всем заинтересованным сторонам.Любые такие стороны могут затем заново создать свою копию переменных среды из реестра.

Я не знаю ни одной готовой функции, которую вы можете просто вызвать, чтобы выполнить это воссоздание, поэтому вынаверное придется написать свой.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...