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

StackOverflow https://stackoverflow.com/questions/136436

Вопрос

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

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

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

Спасибо.

Это было полезно?

Решение

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

Другие советы

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

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

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

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

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

(*) кроме, может быть, возни с внутренними компонентами операционной системы.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top