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

如何从C#检查VB6应用程序是否正在运行(且未因系统错误而挂起)?,c#,.net,winapi,vb6,C#,.net,Winapi,Vb6,我需要从C#service监视用vb6编写的遗留应用程序,并在它挂起时强制退出/重新启动它 如何从C#检查VB6应用程序是否正在运行(未因系统错误而挂起或完全崩溃) 谢谢 您可以轻松地使用该类型监视崩溃 然而,很难判断应用程序是“暂时忙”还是“挂起”,因此我们需要做一些假设 假设这是一个具有活动消息泵的windows窗体应用程序(在VB6中) 我们还可以说,10秒的超时时间是“挂起”应用程序的良好指示 任何依赖消息泵完成的功能都将是挂起应用程序的良好指示器,因为它超过了超时时间 您可以使用任

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

如何从C#检查VB6应用程序是否正在运行(未因系统错误而挂起或完全崩溃)

谢谢

您可以轻松地使用该类型监视崩溃

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

  • 假设这是一个具有活动消息泵的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)