Создание служб Windows с помощью C#

Служба Windows – это специальная служебная программа, которая запускается операционной системой автоматически при загрузке вне зависимости от статуса пользователя или вручную (в зависимости от настроек).

Службы работают в фоновом режиме и, как правило, выполняют различные технологические задачи.

Также, в отличие от «обычных» программ, службы не имеют графического интерфейса и управляются при помощи специального диспетчера.

Мы не станем вдаваться в подробности работы служб Windows как таковой потому, что она достаточно подробно описана в литературе по работе с Windows.

В этой статье мы рассмотрим пример создания службы Windows с использованием языка программирования C#.

Создание службы

Для того, чтобы создать проект службы необходимо в окне создания нового проекта выбрать пункт «Служба Windows».

После этого Visual Studio создаст новый проект с «каркасом» службы.

К сожалению, в отличие, например, от Windows Forms или консольного приложения данный «каркас» не самодостаточен. То есть, установить в систему и запустить в работу такую «пустую» службу нельзя. Необходимо дописать рабочий функционал и логику установки в систему.

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

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

Ниже представлен такой класс для нашей службы.

Теперь, с одной, стороны, у нас есть всё необходимое для работы, но, в то же, время мы пока не можем это никак использовать. Нам необходимо реализовать запуск службы в работу и её остановку.

Для этого в шаблоне проекта предусмотрен специальный файл, который по умолчанию называется Service1.cs. В нём расположен класс, который является наследником класса ServiceBase представляющего основу служб Windows. По сути, этот файл собственно и является будущей службой.

В нём нам требуется описать объект описанного ранее класса в качестве поля и обработать два события. OnStart (запуск службы) и OnStop (её остановка).

Наша служба уже готова к работе, но прежде чем её запустить необходимо установить её в систему.

Visual Studio не предоставляет готового установщика поэтому его нам придётся написать самостоятельно.

Вначале добавим в наш проект класс установщика.

Весь процесс установки описывается в конструкторе класса установщика.

При помощи объектов классов ServiceInstaller и ServiceProcessInstaller мы задаём для службы учётную запись, режим запуска и имена, как это показано ниже:

После написания установщика разработка нашей службы завершена и мы можем её установить и запустить в работу.

Установка и удаление службы

К сожалению, Visual Studio не позволяет установить и запустить службу непосредственно из IDE. Вместо этого нужно воспользоваться специальной консольной утилитой InstallUtil.exe.

Эта утилита располагается в следующей папке:

  • Для 32-разрядных систем:
    C:\Windows\Microsoft.NET\Framework64\v4.0.30319
  • Для 64-разрядных систем:
    C:\Windows\Microsoft.NET\Framework\v4.0.30319

Для установки службы нужно передать InstallUtil.exe полный путь к её исполняемому файлу. В качестве примера файл размещён в папке C:\ServiceTest.

После выполнения данной команды в консоли служба будет установлена в системе и её можно будет запустить в работу.

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

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *