2011-01-02 16 views
2

私は、別のプロセスの状態を監視し、応答を停止、終了、またはエラーをスローするアプリケーションを作成しています。 しかし、プロセス(C++コンソールウィンドウであること)が応答を停止したかどうかを確実に確認することができません。Processクラスを使用してコンソールアプリケーションがまだ実行中であることを確認する

私のコードは次のようになります。

 public void monitorserver() 
    { 
     while (true) 
     { 
      server.StartInfo = new ProcessStartInfo(textbox_srcdsexe.Text, startstring); 
      server.Start(); 
      log("server started"); 
      log("Monitor started."); 
      while (server.Responding) 
      { 
       if (server.HasExited) 
       { 
        log("server exitted, Restarting."); 
        break; 
       } 
       log("server is running: " + server.Responding.ToString()); 
       Thread.Sleep(1000); 
      } 
      log("Server stopped responding, terminating.."); 
      try 
      { server.Kill(); } 
      catch (Exception) { } 
     } 
    } 

私が監視していたアプリケーションはギャリーのModのを実行している、バルブのソース専用サーバであり、私はそれが応答を停止シミュレートする物理エンジンを強調上です。 しかし、これは、プロセスクラスを「応答停止」として認識することはありません。

独自のプロトコルを使用してソースサーバーに直接照会する方法があることは知っていますが、シンプルで普遍的な(今後別のアプリケーションで使用することができるように)保ちたいと思います。

すべてのヘルプはResponding propertyは、プロセスがハングしていないWindowsメッセージループを実行しているかどうかを示し

+0

+1 SLAKの場合、管理できるのは「実行中ですか、停止しましたか」です。私はステータスを確認するために独自のAPIを使用して行くだろう。 –

答えて

3

を高く評価しました。 documentation状態として

プロセスがMainWindowHandleを持っていない場合、このプロパティはtrueを返します。

あなたがしようとしているように、任意のプロセスが任意のことをしているかどうかを確認することはできません。

+0

ありがとう!それを知らなかったし、Googleでそれを見つけることができませんでした^^;次回はよく見えるはずです。コンソールアプリケーションがハングアップしているかどうかを確認する別の方法はありますか?助けてくれてありがとう=) – Alex

+0

@Ced:コンソールプロセスがハングアップしているという概念はありません。コンソールプロセスは常に何かをしています。それは要求に応答することを可能にすることをしているかもしれません。 – SLaks

+0

@Ced:まったくありません。ループを指定する方法はなく、正しいものを見つけることも、ループしているかどうかを確認することもできません。 – SLaks

関連する問題