Пошаговое руководство. Создание приложения служб Windows в конструкторе компонентов
Обновлен: Ноябрь 2007
![]() |
---|
Шаблон Служба Windows и связанные с ним функциональные возможности недоступны в выпуске Visual Studio Standard Edition. |
Представленные в данном разделе процедуры описывают процесс создания простого приложения службы Windows, записывающего сообщения в журнал событий. Для создания службы необходимо выполнить следующие действия:
Cоздать проект на базе шаблона приложения Служба Windows. Этот шаблон создает класс, производный от класса ServiceBase, и формирует основную часть кода службы, например код, необходимый для ее запуска.
Написать код процедур OnStart и OnStop, а также переопределить все необходимые методы.
Добавить установщики, необходимые для приложения службы. По умолчанию при щелчке на ссылке Добавить установщик в приложение добавляется класс, содержащий два или более установщика: один установщик предназначен для установки процесса, а другой — для каждой службы в проекте.
Построить проект.
Создать проект установки, предназначенный для установки службы, и выполнить его установку.
Перейти в диспетчер управления службами Windows 2000 и запустить службу.
Для начала необходимо создать проект и установить значения, необходимые для правильной работы службы.
![]() |
---|
На вашем компьютере названия некоторых элементов интерфейса пользователя Visual Studio или их расположение могут отличаться от указанных в нижеследующих инструкциях. Это зависит от имеющегося выпуска Visual Studio и используемых параметров. Дополнительные сведения см. в разделе Параметры Visual Studio. |
Создание службы
Чтобы создать и настроить службу, выполните следующие действия:
В меню Файл выберите команду Создать проект.
Откроется диалоговое окно Новый проект.
В списке шаблонов проектов Visual Basic или Visual C#, Visual C++ или Visual J# выберите проект Служба Windows и присвойте ему имя MyNewService. Нажмите кнопку ОК.
Примечание.
Шаблон проекта автоматически добавит класс компонента с именем Service1, наследуемый от System.ServiceProcess.ServiceBase.
В конструкторе выберите Service1. Затем в окне Свойства присвойте свойству ServiceName и свойству (Name) компонента Service1 значение MyNewService.
Задайте свойству AutoLog значение true.
В меню Вид выберите команду Код, чтобы открыть редактор кода. Измените метод Main, чтобы создавался экземпляр MyNewService. При переименовании службы на шаге 3 имя класса в методе Main не было изменено. В приложениях Visual C# and Visual J# метод Main размещается в файле Program.cs или Program.js, соответственно.
' To access the Main method in Visual Basic, select Main from the ' method name drop-down list. This expands the Component Designer ' generated code region. Shared Sub Main() Dim ServicesToRun() As System.ServiceProcess.ServiceBase ' Change the following line to match. ServicesToRun = New System.ServiceProcess.ServiceBase() _ {New MyNewService()} System.ServiceProcess.ServiceBase.Run(ServicesToRun) End Sub
static void Main() { System.ServiceProcess.ServiceBase[] ServicesToRun; // Change the following line to match. ServicesToRun = new System.ServiceProcess.ServiceBase[] { new MyNewService() }; System.ServiceProcess.ServiceBase.Run(ServicesToRun); }
public static void main(String[] args) { System.ServiceProcess.ServiceBase[] ServicesToRun; ServicesToRun = new System.ServiceProcess.ServiceBase[] { new MyNewService() }; System.ServiceProcess.ServiceBase.Run(ServicesToRun); }
Добавление компонентов в службу
В следующем разделе к службе Windows будет добавлен настраиваемый журнал событий. Журналы событий никак не связаны со службами Windows. Компонент EventLog используется здесь как пример типа компонента, который можно добавить в службу Windows. Дополнительные сведения о настраиваемых журналах событий см. в разделе Практическое руководство. Создание и удаление пользовательских журналов событий.
Чтобы добавить к службе функцию работы с настраиваемым журналом событий, выполните следующие действия:
В обозревателе решений щелкните правой кнопкой Service1.vb, Service1.cs или Service1.jsl и выберите команду Просмотреть конструктор.
На вкладке Компонентыпанели элементов перетащите в окно конструктора компонент EventLog.
В обозревателе решений щелкните правой кнопкой Service1.vb, Service1.cs или Service1.jsl и выберите команду Просмотреть код.
Измените конструктор, чтобы создавался настраиваемый журнал событий.
' 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"; }
public MyNewService() { InitializeComponent(); if (!System.Diagnostics.EventLog.SourceExists("MySource")) { System.Diagnostics.EventLog.CreateEventSource( "MySource", "MyNewLog"); } eventLog1.set_Source("MySource"); eventLog1.set_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"); }
protected 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."); }
protected 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."); }
protected void OnContinue() { eventLog1.WriteEntry("In OnContinue."); }
При установке службы Windows должны выполняться некоторые специальные действия, которые задаются с помощью класса Installer. С помощью Visual Studio для службы Windows можно специально создавать подобные установщики и добавлять их в проект.
Чтобы создать установщики для службы, выполните следующие действия:
В обозревателе решений щелкните правой кнопкой Service1.vb, Service1.cs или Service1.jsl и выберите команду Просмотреть конструктор.
Щелкните фон конструктора, чтобы выбрать саму службу, а не какой-либо из ее элементов.
Щелкните правой кнопкой мыши в активном окне конструктора и выберите команду Добавить установщик.
По умолчанию в проект добавляется класс компонента, содержащий два установщика. Компоненту присваивается имя ProjectInstaller, а содержащиеся в нем установщики предназначаются для установки службы и связанного со службой процесса.
В режиме Конструктор для ProjectInstaller выберите ServiceInstaller1 или serviceInstaller1.
В окне Cвойства задайте значение MyNewService для свойства ServiceName.
В конструкторе выберите ServiceProcessInstaller1 (для проекта на Visual Basic) или serviceProcessInstaller1 (для проекта на Visual C# или Visual J#). Задайте свойству Account значение LocalService. Это приведет к установке и выполнению службы с использованием локальной учетной записи служб.
Примечание о безопасности.
Учетная запись LocalService действует как пользователь, не имеющий прав на локальном компьютере, и предоставляет учетные данные для анонимного доступа к любому удаленному серверу. Другие учетные записи следует использовать с осторожностью, поскольку они имеют более полные права доступа и увеличивают риск атак, исходящих от злонамеренного кода.
Чтобы построить проект службы, выполните следующие действия:
В обозревателе решений щелкните правой кнопкой мыши проект и выберите пункт Свойства. Откроется окно Конструктор свойств этого проекта.
На странице "Приложение" в списке Начальный объект выберите MyNewService.
Для построения проекта нажмите CTRL+SHIFT+B.
После того как построение проекта выполнено, он может быть развернут. Проект установки установит скомпилированные файлы проекта и запустит установщики, необходимые для запуска службы Windows. Для создания полного проекта установки в него необходимо сначала добавить выходной файл проекта (MyNewService.exe), а затем настраиваемое действие, необходимое для установки MyNewService.exe. Дополнительные сведения о проектах установки см. в разделе Проекты установки. Дополнительные сведения о настраиваемых действиях см. в разделе Пошаговое руководство. Создание настраиваемого действия.
Чтобы создать для службы проект установки, выполните следующие действия:
В обозревателе решений правой кнопкой щелкните решение, выберите пункт Добавить и команду Создать проект.
В области Типы проектов выберите папку Проекты установки и развертывания.
В области Шаблоны выберите Проект установки. Назовите проект MyServiceSetup. Нажмите кнопку ОК.
В решение будет добавлен проект установки.
Далее следует добавить в установку выходной файл проекта службы Windows (MyNewService.exe).
Чтобы добавить в установочный проект файл MyNewService.exe, выполните следующие действия:
В обозревателе решений щелкните правой кнопкой мыши элемент MyServiceSetup, наведите указатель на пункт Добавить и выберите Выходной элемент проекта.
Появится диалоговое окно Добавление выходной группы проекта.
В окне Проект будет выбран элемент MyNewService.
Выберите из списка элемент Основные выходные файлы и нажмите кнопку ОК.
В установочный проект будет добавлен элемент проекта, соответствующий основным выходным файлам MyNewService.
Теперь следует добавить настраиваемое действие, необходимое для установки файла MyNewService.exe.
Чтобы добавить в установочный проект настраиваемое действие, выполните следующие действия:
В обозревателе решений щелкните правой кнопкой мыши проект установки, наведите указатель на пункт Вид и выберите Настраиваемые действия.
Появится окно редактора Настраиваемые действия.
В редакторе настраиваемых действий щелкните правой кнопкой узел Настраиваемые действия и выберите команду Добавить настраиваемое действие.
Появится диалоговое окно Выбор элемента в проекте.
Дважды щелкните пункт Папка приложения в списке, чтобы открыть его, выберите Основные выходные файлы для MyEventLog (Активный) и нажмите кнопку ОК.
Во все четыре узла настраиваемых действий (Установить, Зафиксировать, Отменить и Удалить) будут добавлены основные выходные файлы проекта.
В обозревателе решений щелкните правой кнопкой мыши проект MyServiceSetup и выберите команду Построить.
Чтобы установить службу Windows, выполните следующие действия:
Чтобы установить MyNewService.exe, щелкните правой кнопкой мыши установочный проект в обозревателе решений и выберите команду Установить.
Следуйте действиям, предлагаемым мастером установки. Выполните построение и сохранение решения.
Чтобы запустить или остановить службу, выполните следующие действия:
Откройте диспетчер управления службами одним из следующих способов:
В Windows XP и Windows 2000 Professional щелкните правой кнопкой мыши значок Мой компьютер на рабочем столе и выберите пункт меню Управление. В консоли Управление компьютером разверните узел Службы и приложения.
-либо-
В Windows Server 2003 и Windows 2000 Server нажмите кнопку Пуск, наведите указатель на Программы, затем выберите Администрирование и Службы.
Примечание.
В системе Windows NT 4.0 это диалоговое окно можно открыть с помощью панели управления.
В разделе Службы диалогового окна появится MyNewService.
Выберите службу из списка, щелкните ее правой кнопкой мыши и нажмите кнопку Пуск.
Щелкните службу правой кнопкой мыши и выберите команду Остановить.
Чтобы проверить формирование журнала событий службы, выполните следующие действия:
Откройте обозреватель серверов и найдите узел Журналы событий. Дополнительные сведения см. в разделе Практическое руководство. Работа с журналами событий в обозревателе серверов.
Примечание.
Шаблон Служба Windows и связанные с ним функциональные возможности недоступны в выпуске Visual Studio Standard Edition.
Найдите список для MyNewLog и откройте его. Будут отображены сведения о выполненных службой действиях.
Чтобы удалить службу, выполните следующие действия:
В меню Пуск выберите Панель управления, Установка и удаление программ, найдите нужную службу и нажмите кнопку Удалить.
Кроме того, удалить программу можно, щелкнув правой кнопкой значок MSI-файла программы и выбрав команду Удалить.
Примечание.
Если служба была установлена в Windows 2000, то перед ее удалением необходимо перезагрузить систему. В Windows 2000 службы удаляются полностью только после перезагрузки системы.
Следующие действия
Кроме того, можно изучить возможности компонента ServiceController, позволяющего отправлять команды установленной службе. Дополнительные сведения об использовании компонента ServiceController см. в разделе Наблюдение за службами Windows.
Для создания журнала событий при установке приложения можно воспользоваться установщиком, а не создавать журнал после запуска приложения. Кроме того, в этом случае журнал событий будет удален установщиком при удалении приложения. Дополнительные сведения см. в разделе Пошаговое руководство. Установка компонента журнала событий.
См. также
Задачи
Практическое руководство. Добавление установщиков в приложение служб
Практическое руководство. Установка и удаление служб
Практическое руководство. Отладка приложений служб Windows
Практическое руководство. Запуск средства просмотра событий из обозревателя серверов
Основные понятия
Знакомство с приложениями служб Windows
Ссылки
Практическое руководство. Подключение и инициализация обозревателя серверов/обозревателя баз данных