2009-03-31 27 views
2

私はSystem.Diagnostics.Processクラスについてよく知っています。しかし、特定のプロセスをどのように監視できるか(つまり、XX分/秒ごとに実行されているかどうかを確認する)については疑問に思っています。私は、プロセスが実行中であるかどうかを確認する必要があり、そうであれば、残りのプログラムを初期化します。プロセス監視

おかげで、
-Zack

答えて

4

あなたがプロセスを自分で開始しなかった場合、あなたは一度Process.GetProcessesByName(...)またはProcess.GetProcesses(...)

によって返されたリストを見ることで、プロセスに関連付けられているProcessオブジェクトを見つける取得します(HasExitedを含む)と(彼の応答でJonが言及しているように)EnableRaisingEventsを設定すると、そのイベント(Exitedを含む)を聞くことができます。

5

、それはまだ実行しているかどうかの確認は簡単です:Process.HasExited

これを定期的にポーリングするのではなく、EnableRaisingEventsをtrueに設定して、Exitedイベントにハンドラをアタッチすることができます。

編集:あなたがすでに知っていることに依存して、プロセスを「フェッチする」というコメントに質問に答えてください。プロセスIDがわかっている場合は、Process.GetProcessByIdを使用できます。その名前だけがわかっている場合は、Process.GetProcessesByNameを使用し、複数の結果が得られたらどうするべきかを考えなければなりません。 正確なの名前がわからない場合は、Process.GetProcessesを使用して、にはという名前を付けてください。これらのオプションは、優先順に効果的です:)

+0

実際のプロセスをフェッチして、実行されているかどうかを確認しますか? – Zack

+0

ありがとう、私は実際にあなたとダニエルのソリューションの組み合わせをしました。 – Zack

+0

私のアプリケーションが処理されていないexeptionを持っていてプロセスを終了しませんが、フリーズと応答がない場合、どのようにステータスを取得できますか? –

-1

何かこれは、多分?

 Process[] processlist = Process.GetProcesses(); 

     bool found = false; 
     foreach (Process theprocess in processlist) 
     { 
      if(theprocess.ProcessName == "YourProcessName") 
      { 
       found = true; 
       break; 
      } 
     } 

     if (!found) 
     { 
      return; 
     } 
+1

実際の名前を知っていれば、GetProcessesByNameを使うこともできます... –

関連する問題