Как программно проверить, зависло ли приложение в VB.NET

Мне нужно написать программу мониторинга / наблюдения, чтобы проверить серию приложений

Программа мониторинга должна быть в состоянии

  1. Определите, зависли ли приложения, которые он отслеживает, или нет ответа
  2. Если зависает, перезапустите конкретное приложение

Какой API в VB.NET может помочь мне достичь этого?

любой пример кода будет очень полезным

2 ответа

Решение

Вы можете использовать System.Diagnostics.Process для запуска / поиска процессов, которые вы смотрите. В зависимости от приложений, которые вы смотрите, вы можете использовать что-то вроде этого:

For Each proc As Process In System.Diagnostics.Process.GetProcesses
  If proc.ProcessName = "notepad" Then
    If proc.Responding = False Then
      ' attempt to kill the process
      proc.Kill()

      ' try to start it again
      System.Diagnostics.Process.Start(proc.StartInfo)
    End If
  End If
Next

Определить, зависло ли приложение, не всегда понятно. Это может быть просто занято чем-то. Также Process.Responding требует MainWindow.

Это очень простой пример, но я надеюсь, что он направит вас в правильном направлении.

Роланд Бар опубликовал хорошую статью в 2004 году на codeproject.com, в которой рассказывается, почему и как это сделать:

http://www.codeproject.com/Articles/8349/Observing-Applications-via-Heartbeat

Другие вопросы по тегам