Как мне запустить ряд процессов в C # и сохранить их настройки среды? - PullRequest
3 голосов
/ 26 сентября 2008

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

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

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

Спасибо.

Ответы [ 5 ]

0 голосов
/ 26 сентября 2008

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

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

0 голосов
/ 26 сентября 2008

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

0 голосов
/ 26 сентября 2008

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

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

0 голосов
/ 26 сентября 2008

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

0 голосов
/ 26 сентября 2008

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

...