Пошаговое руководство. Создание приложения служб Windows в конструкторе компонентов
Примечание
Шаблон Служба Windows и связанные с ним функциональные возможности недоступны в выпуске Visual Studio Standard Edition.
Представленные в данном разделе процедуры описывают процесс создания простого приложения службы Windows, записывающего сообщения в журнал событий. Для создания службы необходимо выполнить следующие действия:
Cоздать проект на базе шаблона приложения Служба Windows. Этот шаблон создает класс, производный от класса ServiceBase, и формирует основную часть кода службы, например код, необходимый для ее запуска.
Написать код процедур OnStart и OnStop, а также переопределить все необходимые методы.
Добавить установщики, необходимые для приложения службы. По умолчанию при щелчке на ссылке Добавить установщик в приложение добавляется класс, содержащий два или более установщика: один установщик предназначен для установки процесса, а другой — для каждой службы в проекте.
Построить проект.
Создать проект установки, предназначенный для установки службы, и выполнить его установку.
Перейти в диспетчер управления службами Windows 2000 и запустить службу.
Для начала необходимо создать проект и установить значения, необходимые для правильной работы службы.
Примечание
На вашем компьютере названия некоторых элементов интерфейса пользователя Visual Studio или их расположение могут отличаться от указанных в нижеследующих инструкциях. Это зависит от имеющегося выпуска Visual Studio и используемых параметров. Дополнительные сведения см. в разделе Параметры Visual Studio.
Создание службы
Чтобы создать и настроить службу, выполните следующие действия:
В меню Файл щелкните Создать проект.
Откроется диалоговое окно Новый проект.
В списке шаблонов проектов Visual Basic или Visual C# выберите проект Служба Windows и присвойте ему имя MyNewService. Нажмите кнопку ОК.
Примечание
Шаблон проекта автоматически добавит класс компонента с именем Service1, наследуемый от System.ServiceProcess.ServiceBase.
В конструкторе выберите Service1. Затем в окне Свойства присвойте свойству ServiceName и свойству (Name) компонента Service1 значение MyNewService.
Добавление компонентов в службу
В следующем разделе к службе Windows будет добавлен настраиваемый журнал событий. Журналы событий никак не связаны со службами Windows. Компонент EventLog используется здесь как пример типа компонента, который можно добавить в службу Windows.
Чтобы добавить к службе функцию работы с настраиваемым журналом событий, выполните следующие действия:
В Обозревателе решений щелкните правой кнопкой мыши файл Service1.vb или Service1.cs и выберите команду Открыть в конструкторе.
На вкладке Компоненты панели элементов перетащите в окно конструктора компонент EventLog.
В Обозревателе решений щелкните правой кнопкой мыши файл Service1.vb или Service1.cs и выберите команду Просмотр кода.
Добавьте или измените конструктор, чтобы определить настраиваемый журнал событий.
' To access the constructor in Visual Basic, select New from the ' method name drop-down list. Public Sub New() MyBase.New() InitializeComponent() If Not System.Diagnostics.EventLog.SourceExists("MySource") Then System.Diagnostics.EventLog.CreateEventSource("MySource", "MyNewLog") End If EventLog1.Source = "MySource" EventLog1.Log = "MyNewLog" End Sub
public MyNewService() { InitializeComponent(); if (!System.Diagnostics.EventLog.SourceExists("MySource")) { System.Diagnostics.EventLog.CreateEventSource( "MySource","MyNewLog"); } eventLog1.Source = "MySource"; eventLog1.Log = "MyNewLog"; }
Чтобы задать поведение службы при запуске, выполните следующие действия:
Откройте в редакторе кода метод OnStart, который был автоматически переопределен при создании проекта, и напишите код, задающий действия при запуске службы:
' To access the OnStart in Visual Basic, select OnStart from the ' method name drop-down list. Protected Overrides Sub OnStart(ByVal args() As String) EventLog1.WriteEntry("In OnStart") End Sub
protected override void OnStart(string[] args) { eventLog1.WriteEntry("In OnStart"); }
Примечание
Приложение службы предназначено для долговременного выполнения.Соответственно, оно обычно опрашивает или отслеживает что-либо в системе.Отслеживание настраивается в методе OnStart.Тем не менее, метод OnStart не отвечает за фактическое отслеживание.После начала работы службы метод OnStart должен возвращать управление операционной системе.Он не должен уходить в бесконечный цикл или блокироваться.Для создания простого механизма опроса можно воспользоваться компонентом System.Timers.Timer.В методе OnStart можно задать параметры компонента и установить значение true для свойства Enabled.Таймер будет выполнять периодическую генерацию событий, при возникновении которых служба сможет вести отслеживание.
Чтобы задать поведение службы при остановке, выполните следующие действия:
В редакторе кода выберите в раскрывающемся списке Имя метода процедуру OnStop, которая была автоматически переопределена при создании проекта. Напишите код, задающий действия, выполняемые при остановке службы:
Protected Overrides Sub OnStop() EventLog1.WriteEntry("In OnStop.") End Sub
protected override void OnStop() { eventLog1.WriteEntry("In onStop."); }
Кроме того, для определения дополнительной обработки можно переопределить методы OnPause, OnContinue и OnShutdown.
Чтобы задать поведение службы в прочих случаях, выполните следующие действия:
Перегрузите соответствующий метод, который требуется для работы службы, и задайте необходимые для этого действия.
В следующем примере кода показан результат переопределения метода OnContinue:
Protected Overrides Sub OnContinue() EventLog1.WriteEntry("In OnContinue.") End Sub
protected override void OnContinue() { eventLog1.WriteEntry("In OnContinue."); }
При установке службы Windows должны выполняться некоторые специальные действия, которые задаются с помощью класса Installer. С помощью Visual Studio для службы Windows можно специально создавать подобные установщики и добавлять их в проект.
Чтобы создать установщики для службы, выполните следующие действия:
В Обозревателе решений щелкните правой кнопкой мыши файл Service1.vb или Service1.cs и выберите команду Открыть в конструкторе.
Щелкните фон конструктора, чтобы выбрать саму службу, а не какой-либо из ее элементов.
Щелкните правой кнопкой мыши в активном окне конструктора и выберите команду Добавить установщик.
По умолчанию в проект добавляется класс компонента, содержащий два установщика. Компоненту присваивается имя ProjectInstaller, а содержащиеся в нем установщики предназначаются для установки службы и связанного со службой процесса.
В режиме Конструктор для ProjectInstaller выберите ServiceInstaller1 или serviceInstaller1.
Убедитесь, что в окне Свойства свойство ServiceName имеет значение MyNewService.
В конструкторе выберите ServiceProcessInstaller1 (для проекта на Visual Basic) или serviceProcessInstaller1 (для проекта на Visual C#). Задайте для свойства Account значение LocalSystem. Это приведет к установке и выполнению службы с использованием локальной учетной записи служб.
Примечание по безопасности
У учетной записи LocalSystem имеется множество разрешений, включая разрешение на запись в журнал событий.Эту учетную запись следует использовать с осторожностью, поскольку это может увеличить риск атак с помощью вредоносных программ.Для других задач следует рассмотреть возможность использования учетной записи LocalService, которая аналогична учетной записи непривилегированного пользователя локального компьютера. Удаленным серверам при этом передаются учетные данные анонимного пользователя.
Чтобы построить проект службы, выполните следующие действия:
В обозревателе решений щелкните правой кнопкой мыши проект и выберите пункт Свойства. Откроется окно Конструктор свойств этого проекта.
На странице "Приложение" в списке Автоматически запускаемый объект выберите MyNewService.
Для построения проекта нажмите CTRL+SHIFT+B.
После того как построение проекта выполнено, он может быть развернут. Проект установки установит скомпилированные файлы проекта и запустит установщики, необходимые для запуска службы Windows. Для создания полного проекта установки в него необходимо сначала добавить выходной файл проекта (MyNewService.exe), а затем настраиваемое действие, необходимое для установки MyNewService.exe. Дополнительные сведения о проектах установки см. в разделе Проекты установки и развертывания. Дополнительные сведения о настраиваемых действиях см. в разделе Пошаговое руководство. Создание настраиваемого действия.
Чтобы создать для службы проект установки, выполните следующие действия:
В Обозревателе решений щелкните правой кнопкой мыши решение, выберите команду Добавить, затем — пункт Новый проект.
В списке Установленные шаблоны последовательно разверните узлы Другие типы проектов и Установка и развертывание.
Выберите Установщик Visual Studio.
В области Шаблоны выберите Проект установки. Назовите проект MyServiceSetup. Нажмите кнопку ОК.
В решение будет добавлен проект установки.
Далее следует добавить в установку выходной файл проекта службы Windows (MyNewService.exe).
Чтобы добавить в установочный проект файл MyNewService.exe, выполните следующие действия:
В обозревателе решений щелкните правой кнопкой мыши элемент MyServiceSetup, наведите указатель на пункт Добавить и выберите Выходной элемент проекта.
Появится диалоговое окно Добавление выходной группы проекта.
В окне Проект будет выбран элемент MyNewService.
Выберите из списка элемент Основные выходные файлы и нажмите кнопку ОК.
В установочный проект будет добавлен элемент проекта, соответствующий основным выходным файлам MyNewService.
Теперь следует добавить настраиваемое действие, необходимое для установки файла MyNewService.exe.
Чтобы добавить в установочный проект настраиваемое действие, выполните следующие действия:
В обозревателе решений щелкните правой кнопкой мыши проект установки, наведите указатель на пункт Вид и выберите Настраиваемые действия.
Появится окно редактора Настраиваемые действия.
В редакторе настраиваемых действий щелкните правой кнопкой узел Настраиваемые действия и выберите команду Добавить настраиваемое действие.
Появится диалоговое окно Выбор элемента в проекте.
Дважды щелкните пункт Папка приложения в списке, чтобы открыть его, выберите Основные выходные файлы для MyEventLog (Активный) и нажмите кнопку ОК.
Во все четыре узла настраиваемых действий (Установить, Зафиксировать, Отменить и Удалить) будут добавлены основные выходные файлы проекта.
В обозревателе решений щелкните правой кнопкой мыши проект MyServiceSetup и выберите команду Построить.
Чтобы установить службу Windows, выполните следующие действия:
Чтобы установить MyNewService.exe, щелкните правой кнопкой мыши установочный проект в обозревателе решений и выберите команду Установить.
Следуйте действиям, предлагаемым мастером установки. Выполните построение и сохранение решения.
Чтобы запустить или остановить службу, выполните следующие действия:
Чтобы открыть диспетчер управления службами в Windows 7, Windows Vista и Windows Server, щелкните правой кнопкой мыши пункт Computer в меню Пуск и выберите пункт Управление. В консоли Управление компьютером на левой панели разверните узел Службы и приложения. Щелкните Службы.
В разделе Службы диалогового окна появится MyNewService.
Выберите службу из списка, щелкните ее правой кнопкой мыши и нажмите кнопку Пуск.
Щелкните службу правой кнопкой мыши и выберите команду Остановить.
Чтобы проверить формирование журнала событий службы, выполните следующие действия:
Откройте обозреватель серверов и найдите узел Журналы событий.
Примечание
Шаблон Служба Windows и связанные с ним функциональные возможности недоступны в выпуске Visual Studio Standard Edition.
Найдите список для MyNewLog и откройте его. Будут отображены сведения о выполненных службой действиях.
Чтобы удалить службу, выполните следующие действия:
- В меню Пуск выберите Панель управления, Установка и удаление программ, найдите нужную службу и нажмите кнопку Удалить.
Следующие действия
Кроме того, можно изучить возможности компонента ServiceController, позволяющего отправлять команды установленной службе.
Для создания журнала событий при установке приложения можно воспользоваться установщиком, а не создавать журнал после запуска приложения. Кроме того, в этом случае журнал событий будет удален установщиком при удалении приложения.
См. также
Задачи
Практическое руководство. Добавление установщиков в приложение служб
Практическое руководство. Установка и удаление служб
Практическое руководство. Отладка приложений служб Windows
Ссылки
Практическое руководство. Подключение и инициализация обозревателя серверов/обозревателя баз данных
Основные понятия
Знакомство с приложениями служб Windows