web-dev-qa-db-ja.com

他のコンソールアプリからコンソールアプリケーションを実行する

C#コンソールアプリケーションがあります(A)。他のコンソールアプリ(B)をアプリA内から(同期的に)実行し、Bが同じコマンドウィンドウを使用するようにします。 Bが存在する場合、AはBの終了コードを読み取れるはずです。

どうやってするか?同じコマンドウィンドウでこの他のアプリを実行する方法について、この小さなヒントだけが必要です。

35
Dawid Ohia

Process.Start を使用して、他のコンソールアプリケーションを起動できます。

ProcessStartInfo.RedirectOutputtrueに設定し、 UseShellExecutefalseに設定してプロセスを構築する必要があります自分で出力を利用できるようにするため。

次に、プロセスで StandardOutput.ReadToEnd を使用して出力を読み取ることができます。

35
Oded

Process.Start()呼び出しを使用して別のプロセスを開始できます。 ここの例 は、他のプロセスからの出力を読み取り、それが完了するのを待つ方法を示しています。

9
Brian Rasmussen

Process.Startを使用して別のプロセスを開始できます。コンソールアプリであるかどうかは問題ではありません。アプリがすでにコンソールウィンドウで実行されている場合、新しく生成されたアプリはそのコンソールウィンドウも使用します。

var proc = Process.Start( "...path to second app" );
proc.WaitForExit();
var exitCode = proc.ExitCode;

セカンダリアプリの起動方法に影響を与える可能性のあるさまざまな小さなニュアンスがあるため、必ずProcessクラスのドキュメントを準備してください。

4
Paul Alexander

次の設定を呼び出すことで、同じコマンドウィンドウの一部としてプログラム「B」を実行できました。

ConsoleColor color = Console.ForegroundColor;
ProcessStartInfo startinfo = new ProcessStartInfo(nameProgramB);
startinfo.CreateNoWindow = false;
startinfo.UseShellExecute = false;
Process p = Process.Start(startinfo);
p.WaitForExit();
Console.ForegroundColor = color;

このように、両方のプログラムは、単一のプログラムのようにシームレスに実行されます。 「nameProgramB」はプログラム「B」の名前です。お役に立てれば。

2
Chesare

参照に含め、プログラムクラスのrunメソッドで呼び出されるメソッドを呼び出すことで開始することにより、古いコンソールアプリを新しいコンソールアプリで「ラップ」できます。

1

System.Diagnostics.ProcessStartInfo に入力して Process.Start に渡します

結果のプロセスをWaitForExitし、プロセスのExitCodeプロパティを使用して戻り値を確認できます。

1
John Knoeller