私は、別のプロセスの状態を監視し、応答を停止、終了、またはエラーをスローするアプリケーションを作成しています。 しかし、プロセス(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メッセージループを実行しているかどうかを示し
+1 SLAKの場合、管理できるのは「実行中ですか、停止しましたか」です。私はステータスを確認するために独自のAPIを使用して行くだろう。 –