この投稿で質問されているように、C# で別のプロセスを呼び出す方法は 2 つあります。
Process.Start("hello");
と
Process p = new Process();
p.StartInfo.FileName = "hello.exe";
p.Start();
p.WaitForExit();
- Q1 : それぞれのアプローチの長所と短所は何ですか?
- Q2 : メソッドでエラーが発生するかどうかを確認する
Process.Start()
方法は?
この投稿で質問されているように、C# で別のプロセスを呼び出す方法は 2 つあります。
Process.Start("hello");
と
Process p = new Process();
p.StartInfo.FileName = "hello.exe";
p.Start();
p.WaitForExit();
Process.Start()
方法は?単純なケースの場合、利点は主に利便性です。明らかに、ProcessStartInfo ルートにはより多くのオプション (作業パス、shell-exec の選択など) がありますが、Process.Start(ProcessStartInfo) 静的メソッドもあります。
エラーを再チェックします。Process.Start は Process オブジェクトを返すため、必要に応じて終了を待ってエラー コードを確認できます。stderr をキャプチャする場合は、おそらく ProcessStartInfo アプローチのいずれかが必要です。
WaitForExit
プロセスがすでに実行されている場合、メソッドは null を返すため、最初のメソッドでは を使用できない場合があります。
新しいプロセスが開始されたかどうかを確認する方法は、方法によって異なります。Process
最初のものはオブジェクトまたはを返しますnull
:
Process p = Process.Start("hello");
if (p != null) {
// A new process was started
// Here it's possible to wait for it to end:
p.WaitForExit();
} else {
// The process was already running
}
2番目のものは次を返しますbool
:
Process p = new Process();
p.StartInfo.FileName = "hello.exe";
bool s = p.Start();
if (s) {
// A new process was started
} else {
// The process was already running
}
p.WaitForExit();
違いはほとんどありません。静的メソッドはプロセス オブジェクトを返すため、引き続き "p.WaitForExit()" などを使用できます。新しいプロセスを作成するメソッドを使用すると、プロセス パラメータ (プロセッサ アフィニティなど) を変更してからプロセスを起動する方が簡単です。処理する。
それ以外 - 違いはありません。新しいプロセス オブジェクトは両方の方法で作成されます。
2番目の例では、これと同じです:
Process p = Process.Start("hello.exe");
p.WaitForExit();