Пошаговое руководство. Создание приложения служб Windows в конструкторе компонентов

Обновлен: Ноябрь 2007

zt39148a.alert_note(ru-ru,VS.90).gifПримечание.

Шаблон Служба Windows и связанные с ним функциональные возможности недоступны в выпуске Visual Studio Standard Edition.

Представленные в данном разделе процедуры описывают процесс создания простого приложения службы Windows, записывающего сообщения в журнал событий. Для создания службы необходимо выполнить следующие действия:

  • Cоздать проект на базе шаблона приложения Служба Windows. Этот шаблон создает класс, производный от класса ServiceBase, и формирует основную часть кода службы, например код, необходимый для ее запуска.

  • Написать код процедур OnStart и OnStop, а также переопределить все необходимые методы.

  • Добавить установщики, необходимые для приложения службы. По умолчанию при щелчке на ссылке Добавить установщик в приложение добавляется класс, содержащий два или более установщика: один установщик предназначен для установки процесса, а другой — для каждой службы в проекте.

  • Построить проект.

  • Создать проект установки, предназначенный для установки службы, и выполнить его установку.

  • Перейти в диспетчер управления службами Windows 2000 и запустить службу.

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

zt39148a.alert_note(ru-ru,VS.90).gifПримечание.

На вашем компьютере названия некоторых элементов интерфейса пользователя Visual Studio или их расположение могут отличаться от указанных в нижеследующих инструкциях. Это зависит от имеющегося выпуска Visual Studio и используемых параметров. Дополнительные сведения см. в разделе Параметры Visual Studio.

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

Чтобы создать и настроить службу, выполните следующие действия:

  1. В меню Файл выберите команду Создать проект.

    Откроется диалоговое окно Новый проект.

  2. В списке шаблонов проектов Visual Basic или Visual C#, Visual C++ или Visual J# выберите проект Служба Windows и присвойте ему имя MyNewService. Нажмите кнопку ОК.

    zt39148a.alert_note(ru-ru,VS.90).gifПримечание.

    Шаблон проекта автоматически добавит класс компонента с именем Service1, наследуемый от System.ServiceProcess.ServiceBase.

  3. В конструкторе выберите Service1. Затем в окне Свойства присвойте свойству ServiceName и свойству (Name) компонента Service1 значение MyNewService.

  4. Задайте свойству AutoLog значение true.

  5. В меню Вид выберите команду Код, чтобы открыть редактор кода. Измените метод 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. Дополнительные сведения о настраиваемых журналах событий см. в разделе Практическое руководство. Создание и удаление пользовательских журналов событий.

Чтобы добавить к службе функцию работы с настраиваемым журналом событий, выполните следующие действия:

  1. В обозревателе решений щелкните правой кнопкой Service1.vb, Service1.cs или Service1.jsl и выберите команду Просмотреть конструктор.

  2. На вкладке Компонентыпанели элементов перетащите в окно конструктора компонент EventLog.

  3. В обозревателе решений щелкните правой кнопкой Service1.vb, Service1.cs или Service1.jsl и выберите команду Просмотреть код.

  4. Измените конструктор, чтобы создавался настраиваемый журнал событий.

    ' 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");
        }
    
    zt39148a.alert_note(ru-ru,VS.90).gifПримечание.

    Приложение службы предназначено для долговременного выполнения. Соответственно, оно обычно опрашивает или отслеживает что-либо в системе. Отслеживание настраивается в методе 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 можно специально создавать подобные установщики и добавлять их в проект.

Чтобы создать установщики для службы, выполните следующие действия:

  1. В обозревателе решений щелкните правой кнопкой Service1.vb, Service1.cs или Service1.jsl и выберите команду Просмотреть конструктор.

  2. Щелкните фон конструктора, чтобы выбрать саму службу, а не какой-либо из ее элементов.

  3. Щелкните правой кнопкой мыши в активном окне конструктора и выберите команду Добавить установщик.

    По умолчанию в проект добавляется класс компонента, содержащий два установщика. Компоненту присваивается имя ProjectInstaller, а содержащиеся в нем установщики предназначаются для установки службы и связанного со службой процесса.

  4. В режиме Конструктор для ProjectInstaller выберите ServiceInstaller1 или serviceInstaller1.

  5. В окне Cвойства задайте значение MyNewService для свойства ServiceName.

  6. Задайте свойству StartType значение Automatic.

  7. В конструкторе выберите ServiceProcessInstaller1 (для проекта на Visual Basic) или serviceProcessInstaller1 (для проекта на Visual C# или Visual J#). Задайте свойству Account значение LocalService. Это приведет к установке и выполнению службы с использованием локальной учетной записи служб.

    zt39148a.alert_security(ru-ru,VS.90).gifПримечание о безопасности.

    Учетная запись LocalService действует как пользователь, не имеющий прав на локальном компьютере, и предоставляет учетные данные для анонимного доступа к любому удаленному серверу. Другие учетные записи следует использовать с осторожностью, поскольку они имеют более полные права доступа и увеличивают риск атак, исходящих от злонамеренного кода.

Чтобы построить проект службы, выполните следующие действия:

  1. В обозревателе решений щелкните правой кнопкой мыши проект и выберите пункт Свойства. Откроется окно Конструктор свойств этого проекта.

  2. На странице "Приложение" в списке Начальный объект выберите MyNewService.

  3. Для построения проекта нажмите CTRL+SHIFT+B.

После того как построение проекта выполнено, он может быть развернут. Проект установки установит скомпилированные файлы проекта и запустит установщики, необходимые для запуска службы Windows. Для создания полного проекта установки в него необходимо сначала добавить выходной файл проекта (MyNewService.exe), а затем настраиваемое действие, необходимое для установки MyNewService.exe. Дополнительные сведения о проектах установки см. в разделе Проекты установки. Дополнительные сведения о настраиваемых действиях см. в разделе Пошаговое руководство. Создание настраиваемого действия.

Чтобы создать для службы проект установки, выполните следующие действия:

  1. В обозревателе решений правой кнопкой щелкните решение, выберите пункт Добавить и команду Создать проект.

  2. В области Типы проектов выберите папку Проекты установки и развертывания.

  3. В области Шаблоны выберите Проект установки. Назовите проект MyServiceSetup. Нажмите кнопку ОК.

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

Далее следует добавить в установку выходной файл проекта службы Windows (MyNewService.exe).

Чтобы добавить в установочный проект файл MyNewService.exe, выполните следующие действия:

  1. В обозревателе решений щелкните правой кнопкой мыши элемент MyServiceSetup, наведите указатель на пункт Добавить и выберите Выходной элемент проекта.

    Появится диалоговое окно Добавление выходной группы проекта.

  2. В окне Проект будет выбран элемент MyNewService.

  3. Выберите из списка элемент Основные выходные файлы и нажмите кнопку ОК.

    В установочный проект будет добавлен элемент проекта, соответствующий основным выходным файлам MyNewService.

Теперь следует добавить настраиваемое действие, необходимое для установки файла MyNewService.exe.

Чтобы добавить в установочный проект настраиваемое действие, выполните следующие действия:

  1. В обозревателе решений щелкните правой кнопкой мыши проект установки, наведите указатель на пункт Вид и выберите Настраиваемые действия.

    Появится окно редактора Настраиваемые действия.

  2. В редакторе настраиваемых действий щелкните правой кнопкой узел Настраиваемые действия и выберите команду Добавить настраиваемое действие.

    Появится диалоговое окно Выбор элемента в проекте.

  3. Дважды щелкните пункт Папка приложения в списке, чтобы открыть его, выберите Основные выходные файлы для MyEventLog (Активный) и нажмите кнопку ОК.

    Во все четыре узла настраиваемых действий (Установить, Зафиксировать, Отменить и Удалить) будут добавлены основные выходные файлы проекта.

  4. В обозревателе решений щелкните правой кнопкой мыши проект MyServiceSetup и выберите команду Построить.

Чтобы установить службу Windows, выполните следующие действия:

  1. Чтобы установить MyNewService.exe, щелкните правой кнопкой мыши установочный проект в обозревателе решений и выберите команду Установить.

  2. Следуйте действиям, предлагаемым мастером установки. Выполните построение и сохранение решения.

Чтобы запустить или остановить службу, выполните следующие действия:

  1. Откройте диспетчер управления службами одним из следующих способов:

    • В Windows XP и Windows 2000 Professional щелкните правой кнопкой мыши значок Мой компьютер на рабочем столе и выберите пункт меню Управление. В консоли Управление компьютером разверните узел Службы и приложения.

      -либо-

    • В Windows Server 2003 и Windows 2000 Server нажмите кнопку Пуск, наведите указатель на Программы, затем выберите Администрирование и Службы.

      zt39148a.alert_note(ru-ru,VS.90).gifПримечание.

      В системе Windows NT 4.0 это диалоговое окно можно открыть с помощью панели управления.

    В разделе Службы диалогового окна появится MyNewService.

  2. Выберите службу из списка, щелкните ее правой кнопкой мыши и нажмите кнопку Пуск.

  3. Щелкните службу правой кнопкой мыши и выберите команду Остановить.

Чтобы проверить формирование журнала событий службы, выполните следующие действия:

  1. Откройте обозреватель серверов и найдите узел Журналы событий. Дополнительные сведения см. в разделе Практическое руководство. Работа с журналами событий в обозревателе серверов.

    zt39148a.alert_note(ru-ru,VS.90).gifПримечание.

    Шаблон Служба Windows и связанные с ним функциональные возможности недоступны в выпуске Visual Studio Standard Edition.

  2. Найдите список для MyNewLog и откройте его. Будут отображены сведения о выполненных службой действиях.

Чтобы удалить службу, выполните следующие действия:

  1. В меню Пуск выберите Панель управления, Установка и удаление программ, найдите нужную службу и нажмите кнопку Удалить.

  2. Кроме того, удалить программу можно, щелкнув правой кнопкой значок MSI-файла программы и выбрав команду Удалить.

    zt39148a.alert_note(ru-ru,VS.90).gifПримечание.

    Если служба была установлена в Windows 2000, то перед ее удалением необходимо перезагрузить систему. В Windows 2000 службы удаляются полностью только после перезагрузки системы.

Следующие действия

Кроме того, можно изучить возможности компонента ServiceController, позволяющего отправлять команды установленной службе. Дополнительные сведения об использовании компонента ServiceController см. в разделе Наблюдение за службами Windows.

Для создания журнала событий при установке приложения можно воспользоваться установщиком, а не создавать журнал после запуска приложения. Кроме того, в этом случае журнал событий будет удален установщиком при удалении приложения. Дополнительные сведения см. в разделе Пошаговое руководство. Установка компонента журнала событий.

См. также

Задачи

Практическое руководство. Добавление установщиков в приложение служб

Практическое руководство. Установка и удаление служб

Практическое руководство. Отладка приложений служб Windows

Практическое руководство. Запуск средства просмотра событий из обозревателя серверов

Основные понятия

Знакомство с приложениями служб Windows

Ссылки

Практическое руководство. Подключение и инициализация обозревателя серверов/обозревателя баз данных

Другие ресурсы

Служебные приложения Windows