C# C检查MFC应用程序是否卡住的方法

C# C检查MFC应用程序是否卡住的方法,c#,mfc,C#,Mfc,我有一个用C编写的看门狗应用程序,它保持MFC进程运行。 我正在使用System.Diagnostics.Process类中的退出事件执行此操作: Process _currentProcess = new Process(); _currentProcess.Exited += LaunchAgain; 其中launchreach是一个应该再次启动流程的函数 问题是,有时用C++编写的MFC应用程序会被熟悉的异常消息所困扰:MFC应用程序已经停止工作,但是这个应用程序的进程仍然是活着的。 因

我有一个用C编写的看门狗应用程序,它保持MFC进程运行。 我正在使用System.Diagnostics.Process类中的退出事件执行此操作:

Process _currentProcess = new Process();
_currentProcess.Exited += LaunchAgain;
其中launchreach是一个应该再次启动流程的函数

问题是,有时用C++编写的MFC应用程序会被熟悉的异常消息所困扰:MFC应用程序已经停止工作,但是这个应用程序的进程仍然是活着的。 因此,看门狗不知道应用程序被卡住了,它一直被卡住,直到手动重新启动

在C语言中,是否有一种方法可以发现MFC应用程序在其进程仍处于活动状态时是否被卡住?
因此,我可以使用我的看门狗自动停止和启动它?

不,如果您可以访问MFC应用程序的源代码,那么没有可靠的方法可以这样做,让它们向您的看门狗发送消息。或者,如果您不能这样做,请配置您的看门狗,使其仅在应用程序冻结10秒后重新启动。当然,这对工作量大的应用程序不起作用。这个解决方案实际上取决于您正在做什么以及您可以实现什么,正确的方法是,正如我提到的那样,在应用程序之间发送消息,因为无法知道进程是否被卡住或者只是满负荷工作。但是windows知道应用程序被卡住了,因为它正在向用户发送错误消息。我想windows事件查看器中也有一个关于它的事件日志。很奇怪,在.NET中没有办法知道它。它说什么?我不知道,因为我不能模拟它。这只是偶尔发生的事。但无论如何,它是一个布尔属性,而不是像“Exited”这样的事件。因此,即使它将返回正确的值,我也必须创建另一个线程,该线程将无休止地检查所有应用程序的该值。从我的观点来看,这是一个糟糕的解决方案。当然,你可以模拟它,只需编写一个虚拟的MFC应用程序崩溃,然后启动该应用程序,而不是真正的应用程序。顺便说一句,当你写卡住你的意思是崩溃?