如何从C#检查VB6应用程序是否正在运行(并且没有挂起系统错误)?

时间:2010-09-09 20:03:53

标签: c# .net winapi vb6

我需要从C#服务中监视用vb6编写的遗留应用程序,并在它挂起时强制退出/重新启动它。

如何从C#检查VB6应用程序是否正在运行(并且没有挂起系统错误或完全崩溃)?

谢谢!

1 个答案:

答案 0 :(得分:2)

您可以轻松使用Process类型来监控崩溃。

然而,很难判断应用程序是“暂时忙碌”还是实际上“挂起”,因此我们需要做出一些假设。

  • 让我们说这是一个Windows窗体应用程序(在VB6中),它有一个活动的消息泵。

  • 让我们也说10秒的超时是一个'挂起'应用程序的良好指示。

任何依赖该消息泵完成的功能都将成为挂起应用程序的一个很好的指示器,因为它超过了超时。

您可以使用任何SendMessage命令与其他应用的消息泵基本上“加入”。

这样的事情:

[DllImport("user32.dll", CharSet = CharSet.Auto)]
public static extern IntPtr SendMessage(IntPtr hWnd, UInt32 Msg, IntPtr wParam, IntPtr lParam);
...

NativeMethods.SendMessage(hWnd, NativeMethods.WM_GETTEXTLENGTH, IntPtr.Zero, IntPtr.Zero)