【问题标题】:Check if an GUI application is running (and responsive)检查 GUI 应用程序是否正在运行(并且响应)
【发布时间】:2020-06-29 07:15:15
【问题描述】:

我想检查一个应用程序(WinForms GUI 应用程序)是否正在运行。目前我使用这个代码:

bool isRunning = Process.GetProcessesByName("SomeApp.exe").Any();

这个解决方案有一个主要问题:当应用程序崩溃时,例如由于缺少 DLL,会弹出通常的 Windows 错误消息“Application Bla stop working...”。虽然显示此消息框,但该过程仍然存在,并且我的代码返回 true。

是否有任何其他方法可以检查应用程序是否真正响应(例如,通过向窗口发送一些消息并等待响应)?

【问题讨论】:

  • 你检查过进程的Responding属性了吗?
  • 这听起来完全像我正在寻找的解决方案。谢谢!您介意将其作为答案,以便我接受吗?
  • 我很高兴它有帮助。 :D 我已将其发布为答案。我应该删除我的 cmets 以使讨论更加集中吗?

标签: c# .net windows


【解决方案1】:

Process 类公开了一个名为Responding (1) 的属性。它会尝试联系 UI,如果没有立即响应,则会返回 false,表示 UI 当前没有响应。

【讨论】:

  • 我刚刚尝试了您的建议。虽然理论上看起来不错,但它不起作用。我的测试应用程序在启动时崩溃(我删除了它的 .exe.config 文件以便找不到依赖项),并且弹出 Windows 错误消息。仍然“响应”返回 true(尽管 GUI 显然没有响应)。
  • @Boris 您的流程是否有MainWindowHandle?因为它是checking against that,并且它没有,所以它会返回true。
  • 是的。它是一个非常简单的 WinForms 应用程序。主窗体已创建并可见。之后发生崩溃并弹出模态 Windows 错误消息(锁定/阻止应用程序的主窗体)。
  • @Boris 你能打电话给MainWindowHandle.ToInt32() 以确保它不为零吗?
  • 句柄是1115042,这似乎是一个合理的值。
猜你喜欢
  • 1970-01-01
  • 2019-02-16
  • 1970-01-01
  • 2011-06-10
  • 2014-09-26
  • 1970-01-01
  • 1970-01-01
  • 2017-03-08
  • 2016-07-01
相关资源
最近更新 更多