C#で一連のプロセスを実行し、環境設定を保持するにはどうすればよいですか?

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

質問

私は、ビルドプロセスで一連のステップを実行し、ターゲットアプリケーションをビルドする自動ビルダーを開発しています。以前は、一連の環境変数を設定するバッチファイル、または環境変数を設定して最終的に「メイク」を実行するツールを呼び出すバッチファイルを使用していました。

これらのコマンドを実行するのに最適な「Process」クラスを使用していますが、残念ながら、環境に変更を加えるたびに(PATHに何かを追加するなど)、「Process」が完了すると変数が失われます。次の「プロセス」がインスタンス化され、「呼び出し」アプリ(my exe)からenvを再び継承します。つまり、最後のコマンドによるすべてのenv設定が失われます。この状況にどのように対処しますか? C#内でコマンドのような一連のバッチファイルを実行し、セットアップされた環境を維持するより良い方法はありますか?

残念なことに、老人たちはnant / antはオプションではないと宣言しているので、「ねえ、なぜNantを使用しないでください-それを行う!」私が探している答えではありません。

ありがとう。

役に立ちましたか?

解決

iは、環境変数を外部ファイルに保存するコードを提案します。その後、次のプロセスの開始時に、外部ファイルを介してこれらの変数を取得できます。

他のヒント

まあ、System.Environment.SetEnvironmentVariable()メソッドを使用すると、設定した変数のスコープを指定できます。これはあなたが探しているものですか?理解したかどうかわからない。

CruiseControl.netを使用してNAntスクリプトを実行します。強くお勧めします。

NAntスクリプトは、-D:コマンドラインスイッチを使用して呼び出して、環境変数に相当するものを設定できます。

ここでカスタム環境変数を指定することに問題はないと思います。 (ProcessStartInfoで設定できます。)問題は、実行中のプロセスによって環境変数に加えられた変更を読み取ることです。それが可能かどうかはわかりません。私が知っている唯一の方法は、プロセス自体および/またはその子プロセスに環境変数を設定します。親プロセスの環境変数を設定する方法がわかりません。

環境変数は決して設定されず、親プロセス(*)に設定できません。現在のプロセスとそれが作成するプロセスのみ-それはコンセプトの一部です。

(*)OSの内部をいじることとは別に、多分、

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top