1
我需要監視從C#服務編寫的vb6中的遺留應用程序,並在其掛起時強制退出/重新啓動它。如何從C#中檢查VB6應用程序是否正在運行(而不是掛在系統錯誤上)?
如何檢查是否VB6應用程序正在運行(而不是要麼掛在系統錯誤或完全崩潰)從C#?
謝謝!
我需要監視從C#服務編寫的vb6中的遺留應用程序,並在其掛起時強制退出/重新啓動它。如何從C#中檢查VB6應用程序是否正在運行(而不是掛在系統錯誤上)?
如何檢查是否VB6應用程序正在運行(而不是要麼掛在系統錯誤或完全崩潰)從C#?
謝謝!
您可以輕鬆使用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)