检查控制台应用程序是否仍在使用Process类运行

时间:2011-01-02 19:48:35

标签: c# .net process

我正在创建一个应用程序来监视另一个进程的状态,并在它停止响应,退出或抛出错误时重新启动它。 但是,我无法让它可靠地检查进程(作为C ++控制台窗口)是否已停止响应。

我的代码如下所示:

       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) { }
        }
    }

我正在监控的应用程序是Valve的Source Dedicated Server,运行Garry的Mod,我过度强调物理引擎模拟它停止响应。 但是,这永远不会触发进程类将其识别为“停止响应”。

我知道有很多方法可以使用他们自己的协议直接查询源服务器,但我希望保持简单和通用(以便我将来可以将它用于不同的应用程序)。

任何帮助表示赞赏

1 个答案:

答案 0 :(得分:3)

Responding property表示进程是否正在运行未挂起的 Windows消息循环
正如documentation所述,

  

如果进程没有MainWindowHandle,则此属性返回true。

正如您所想的那样,无法检查任意进程是否正在执行任意操作。

相关问题