2009-10-09 36 views
11

私はC#.NET 2.0を使用しています。 PIDが存在するかどうかを判断する必要があります。私は次のコードを思いついた:プロセスIDが存在するかどうかを判断する方法

private bool ProcessExists(int iProcessID) 
{ 
    foreach (Process p in Process.GetProcesses()) 
    { 
     if (p.Id == iProcessID) 
     { 
      return true; 
     } 
    } 
    return false; 
} 

すべてのプロセスを反復する以外の方法がありますか?

答えて

18

クイックメモ:自分以外のプロセスが実行されているかどうかは決して判断できません。あなたはそれが最近の過去のある時点で実行されていたことだけを伝えることができます。プロセスは、IDと一致するかどうかを確認する正確な瞬間を含め、任意の時点で存在しなくなることがあります。

言われているように、このタイプの決定はあなたのプログラムにとって十分かもしれません。それは本当にあなたがしようとしていることに依存します。

ここには、作成したコードの簡略版があります。

private bool ProcessExists(int id) { 
    return Process.GetProcesses().Any(x => x.Id == id); 
} 
2

System.Diagnostics.Process.GetProcessById(iProcessID)は、プロセスが存在しない場合、ArgumentExceptionをスローします。それがプロセスが存在するかどうかを確認する最善の方法ではありませんが、うまくいけば、これはあなたが探しているものです。

+0

提案していただきありがとうございますが、標準的な練習として、いくつかの価値を解決しようとすると例外をキャッチするのが間違っています。 – Ken

+0

私は同意しますが、これがあなたのプログラムが探していたものであることを期待していました。特定のプロセスIDが生存していたかどうかをチェックする理由は考えられませんでした。 –

6

危険なことは次のとおりです。プロセスIDはどこから取得しましたか?以前に保存した番号だけの場合は、元のプロセスが終了し、新しいプロセスがrunning with the same IDになる可能性があります。

あなたは何を達成しようとしていますか?あなたの実際の目標を達成するためのよりよい方法があるかもしれません。

+0

PIDは信頼できるものです。これは、アプリケーションを起動する2番目のアプリケーションのPIDです。 2番目のアプリケーションは、アプリケーションの実行中は常に稼働していることが保証されています。 (私のアプリケーションは本質的に、親として2番目のアプリケーションを持つDialogBoxです)。それ以外は、Frankensteinの詳細はこの質問のために入門する価値はありません。ありがとう。 – Ken

+0

しかし、あなたの質問は、それが実行されているかどうかを判断することです。走っていることが保証されている場合は、なぜチェックする必要がありますか? –

+0

良い点。例外的なケースが実際には私の外にある何らかの理由で起こった場合の正気チェックです。サンプルコードが実際に何をしているかをよりよく表すために、質問テキストを編集します。ありがとう。 – Ken

関連する問題