Как проверить, запущено ли приложение VB6 (и не зависло ли при системной ошибке) из C #? - PullRequest
1 голос
/ 10 сентября 2010

Мне нужно отслеживать устаревшее приложение, написанное на vb6, из службы C # и принудительно завершать / перезапускать его всякий раз, когда оно зависает.

Как проверить, запущено ли приложение VB6 (и не зависло ли оносистемная ошибка или сбой полностью) из C #?

Спасибо!

1 Ответ

2 голосов
/ 10 сентября 2010

Вы можете легко использовать тип Process для отслеживания сбоев.

Однако сложно определить, является ли приложение «временно занятым» или фактически «зависшим», поэтомунам нужно сделать несколько предположений.

  • Допустим, это приложение Windows Form (в 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)  
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...