2010-06-30 6 views
1

Я программирую приложение мониторинга, которое должно отображать состояние нескольких служб Windows. В текущей версии я могу узнать, работает ли служба «Запуск», «Остановлен», «Приостановлено» или в одном из ожидающих состояний. Это хорошо, но мне интересно, есть ли способ проверить, действительно ли служба отвечает? Я думаю, он может быть в рабочем состоянии, но не реагирует вообще!Как проверить реактивность службы Windows?

Я использую класс ServiceController от System.ServiceProcess. Считаете ли вы, что если служба не отвечает, ServiceController.Status вернет исключение?

Как вы подходите к проблеме?

Благодаря

EDIT Кажется, что: ServiceController.Status может вернуть 2 типа исключений:

System.ComponentModel.Win32Exception: An error occurred when accessing a system API. 
System.InvalidOperationException: The service does not exist as an installed service. 

Ничего о реакционной способности.

ответ

2

Это может быть очевидно, но вы пробовали разговариваете с услугой?

Нет общего способа общения с сервисом, поэтому Windows не может опросить, отвечает ли служба, как обычно. Совершенно нормально, когда служба переходит в полный сон, ожидая, когда произойдет внешний ввод-вывод, и, таким образом, Windows не получит ответа, пока служба действительно жива и функционирует точно так, как она была разработана.

Единственный способ это на самом деле отправить запрос на него, и ждать ответ, а для этого нужен межпроцессного канала связи, например:

  • сеть
  • Именованных каналов

В принципе, если вам нужно определить, может ли служба ответить, вам нужно проверить, отвечает ли он.

+0

Никогда не работал с IPC на .NET. Это повод :) –

2

Типы диспетчера служб и API могут предоставлять информацию только на основе ответа службы на эти API.

E.g. вы можете создать службу, которая правильно отвечает на эти API, но не дает никаких функций даже в четные часы.

В конце концов вам необходимо определить «отзывчивую» с точки зрения функциональных возможностей служб (например, пакетный процессор обрабатывает партии) и предоставить механизм (API A2A, WMI, счетчики производительности), чтобы нанести это.

+0

Хорошо. Но я подумал, что можно было бы иметь что-то похожее на статус «отзывчивости» приложения в диспетчере задач Windows (ctrl-alt-del). Поэтому вместо перехода на функциональный уровень, оставаясь на уровне системы/процесса. –

Смежные вопросы