Как мне запустить ряд процессов в C# и сохранить их настройки среды?
Я занимаюсь разработкой автоматического сборщика, который будет выполнять серию шагов в процессе сборки и создавать целевое приложение. Мы использовали пакетный файл, который устанавливал кучу переменных среды или называл инструменты, которые настраивали переменные среды и в конечном итоге запускали "make".
Я использовал класс "Процесс", который прекрасно работает для выполнения этих команд, но, к сожалению, каждый раз, когда выполняется один, который вносит изменения в среду (например, добавляет что-то в переменную PATH), эти переменные теряются, когда завершается "Процесс". Следующий экземпляр "Process" создается и наследует env от "вызывающего" приложения (мой exe) снова, что означает, что все настройки env последней командой потеряны. Как вы справляетесь с этой ситуацией? Есть ли лучший способ запустить серию командных файлов, таких как команды, в C# и поддерживать среду, которую они настроили?
Обратите внимание, что, к сожалению, старшеклассники объявили, что nant / ant не вариант, поэтому "Эй, почему бы не использовать Nant - он делает это!" это не ответ, который я ищу.
Благодарю.
5 ответов
Я хотел бы предложить некоторый код, который сохранит ваши переменные среды во внешний файл, а затем вы можете получить эти переменные через внешний файл в начале следующих процессов.
Итак, метод System.Environment.SetEnvironmentVariable() позволит вам указать область действия для устанавливаемой переменной. Это то, что вы ищите? Не уверен, что я понимаю.
Я думаю, что проблема не в указании пользовательских переменных среды здесь. (Вы можете установить их через ProcessStartInfo.) Проблема заключается в чтении изменений, внесенных в переменные среды выполняемыми процессами. Я не уверен, если это возможно. Единственные известные мне способы установки переменных среды для самого процесса и / или его дочерних процессов. Я не знаю, как установить переменные среды для родительского процесса.
Мы используем CruiseControl.net для запуска скрипта NAnt. Настоятельно рекомендуется.
Сценарий NAnt может быть вызван с помощью ключа командной строки -D: для установки эквивалента переменных среды.
Переменные среды никогда не устанавливаются и не могут быть установлены для родительского процесса (*). Только для текущего процесса и тех, которые он создает, - это часть концепции.
(*) кроме, может быть, возни с внутренностями ОС.