Как мне запустить ряд процессов в C# и сохранить их настройки среды?

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

Я использовал класс "Процесс", который прекрасно работает для выполнения этих команд, но, к сожалению, каждый раз, когда выполняется один, который вносит изменения в среду (например, добавляет что-то в переменную PATH), эти переменные теряются, когда завершается "Процесс". Следующий экземпляр "Process" создается и наследует env от "вызывающего" приложения (мой exe) снова, что означает, что все настройки env последней командой потеряны. Как вы справляетесь с этой ситуацией? Есть ли лучший способ запустить серию командных файлов, таких как команды, в C# и поддерживать среду, которую они настроили?

Обратите внимание, что, к сожалению, старшеклассники объявили, что nant / ant не вариант, поэтому "Эй, почему бы не использовать Nant - он делает это!" это не ответ, который я ищу.

Благодарю.

5 ответов

Решение

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

Итак, метод System.Environment.SetEnvironmentVariable() позволит вам указать область действия для устанавливаемой переменной. Это то, что вы ищите? Не уверен, что я понимаю.

Я думаю, что проблема не в указании пользовательских переменных среды здесь. (Вы можете установить их через ProcessStartInfo.) Проблема заключается в чтении изменений, внесенных в переменные среды выполняемыми процессами. Я не уверен, если это возможно. Единственные известные мне способы установки переменных среды для самого процесса и / или его дочерних процессов. Я не знаю, как установить переменные среды для родительского процесса.

Мы используем CruiseControl.net для запуска скрипта NAnt. Настоятельно рекомендуется.

Сценарий NAnt может быть вызван с помощью ключа командной строки -D: для установки эквивалента переменных среды.

Переменные среды никогда не устанавливаются и не могут быть установлены для родительского процесса (*). Только для текущего процесса и тех, которые он создает, - это часть концепции.

(*) кроме, может быть, возни с внутренностями ОС.

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