3

この投稿で質問されているように、C# で別のプロセスを呼び出す方法は 2 つあります。

Process.Start("hello");

Process p = new Process();
p.StartInfo.FileName = "hello.exe";
p.Start();
p.WaitForExit();
  • Q1 : それぞれのアプローチの長所と短所は何ですか?
  • Q2 : メソッドでエラーが発生するかどうかを確認するProcess.Start()方法は?
4

3 に答える 3

6

単純なケースの場合、利点は主に利便性です。明らかに、ProcessStartInfo ルートにはより多くのオプション (作業パス、shell-exec の選択など) がありますが、Process.Start(ProcessStartInfo) 静的メソッドもあります。

エラーを再チェックします。Process.Start は Process オブジェクトを返すため、必要に応じて終了を待ってエラー コードを確認できます。stderr をキャプチャする場合は、おそらく ProcessStartInfo アプローチのいずれかが必要です。

于 2011-02-12T10:33:43.377 に答える
6

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();
于 2011-02-12T10:41:00.233 に答える
1

違いはほとんどありません。静的メソッドはプロセス オブジェクトを返すため、引き続き "p.WaitForExit()" などを使用できます。新しいプロセスを作成するメソッドを使用すると、プロセス パラメータ (プロセッサ アフィニティなど) を変更してからプロセスを起動する方が簡単です。処理する。

それ以外 - 違いはありません。新しいプロセス オブジェクトは両方の方法で作成されます。

2番目の例では、これと同じです:

Process p = Process.Start("hello.exe");
p.WaitForExit();
于 2011-02-12T10:40:21.470 に答える