gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 15:46:04 27 4
gpt4 key购买 nike

我正在制作一个应用程序,它将监视另一个进程的状态并在它停止响应、退出或抛出错误时重新启动它。但是,我无法让它可靠地检查进程(作为 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 专用服务器,运行着 Garry 的 Mod,我过度强调物理引擎以模拟它停止响应。但是,这永远不会触发进程类将其识别为“停止响应”。

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

感谢任何帮助

最佳答案

Responding property指示进程是否正在运行未挂起的 Windows 消息循环
作为documentation州,

If the process does not have a MainWindowHandle, this property returns true.

无法像您尝试的那样检查任意进程是否正在执行任意操作。

关于c# - 使用 Process 类检查控制台应用程序是否仍在运行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4580162/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com