Создание сервиса для мониторинга - PullRequest
0 голосов
/ 21 июля 2010

В качестве упражнения как при написании служб Windows, так и при общении с ними я решил попробовать написать службу для мониторинга производительности оборудования на моем компьютере, записывать ее и ежедневно отчитываться об этом.Я хочу иметь возможность удаленно запрашивать службу и, немного изучив ее, думаю, я мог бы встроить туда ServiceHost.

Как на самом деле работает служба?Все примеры, которые я нашел, были OnStart..OnStop, ServiceHost.Run () и все.Работает ли процесс бесконечно, нужно ли где-то писать цикл, который постоянно что-то проверяет?

Кроме того, реалистично ли отслеживать машины Windows с помощью WMI через службу для отчета о дисковом пространстве, IO и использовании памяти?Из того, что я прочитал, они не самые быстрые, и, на мой взгляд, мой сервис будет иметь интервал опроса и проверять определенную статистику каждые пару минут или около того.Повлияет ли это на машину?

Ответы [ 3 ]

1 голос
/ 21 июля 2010

Посмотрите на this для примера (и объяснения) того, как написать сервис, очень похожий на то, что вы делаете (то есть многократно вызывая некоторые функции).

ToОтветьте на свой вопрос, вы несете ответственность за то, чтобы ваш код периодически запускался.Вы можете сделать это, зарегистрировав обратный вызов по таймеру или запустив поток, который работает в цикле, пока не будет вызван метод OnStop.

Что касается мониторинга машины через WMI - объем статистики, который выСбор с интервалом в несколько минут не должен вызывать проблему.Я видел случаи, когда большое количество данных собиралось относительно часто без существенного влияния.

1 голос
/ 21 июля 2010

Службы Windows получают команды запуска и остановки (запросы управления) через службу Service Control Manager (SCM) .Этот «супер сервис» запускается на ранней стадии последовательности запуска Windows и отвечает за запуск всех других сервисов.

Сервисные функции предоставляют интерфейс для следующих задач, выполняемых SCM:

  • Ведение базы данных установленных служб.
  • Запуск служб и служб драйверов либо при запуске системы, либо по запросу.
  • Перечисление установленных служб и служб драйверов.
  • Ведение информации о состоянии для запущенных служб и служб драйверов.
  • Передача управляющих запросов в работающие службы.
  • Блокировка и разблокировка базы данных службы.

См. Запуск служб по требованию для получения указателей на доступные функции SCM:

Пользователь может запустить службу с помощью утилиты панели управления службами.Пользователь может указать аргументы для сервиса в поле Параметры запуска.Программа управления службами может запускать службу и задавать ее аргументы с помощью функции StartService.

Что касается нагрузки, создаваемой функциями мониторинга, вам придется поиграть с интервалом опроса и решить, какие издержкиприемлемоОбычно интервалы от 2 до 5 минут не представляют проблемы.

1 голос
/ 21 июля 2010

Мне нравится реализовывать сервисы, где запуск / останов / выключение запускаются и останавливаются таймером, где интервал установлен в конфигурации.

Когда срабатывает событие таймера, я обычно останавливаю таймер, процессзадачи и перезапуск таймера (выключение при запуске / останове устанавливает флаг, который проверяется перед перезапуском). Это обслуживает долго выполняющиеся задачи (то есть задачи, которые могут выполняться в течение интервала времени, если его набор действительно короткий)

Если вы проверяете каждую пару минут, скорость WMI, вероятно, не имеет значения, но в любом случае, исследуйте различные способы представления отчетов по этим критериям и ищите наиболее эффективные способы.

Еще одна замечательная вещь, которую нужно сделатьэто настроить Program.cs так, чтобы приложение могло принимать параметры и устанавливать / удалять себя и запускать задачи один раз, просто запустив exe (то есть не как сервис). Это помогает отладить сервис.см .: Программная установка Windows Service

...