Пример полной службы

Разделы этого раздела содержат полный пример службы:

  • Sample.mc (содержит сообщения об ошибках)
  • Svc.cpp (содержит код службы)
  • SvcConfig.cpp (содержит код конфигурации службы)
  • SvcControl.cpp (содержит код элемента управления службой)

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

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

Сборка службы и регистрация библиотеки DLL сообщений о событиях

  1. Создайте библиотеку DLL-библиотеки сообщений из Sample.mc, выполнив следующие действия.

    1. mc -U sample.mc
    2. rc -r sample.rc
    3. link -dll -noentry -out:sample.dll sample.res
  2. Сборка Svc.exe, SvcConfig.exe и SvcControl.exe из Svc.cpp, SvcConfig.cpp и SvcControl.cpp соответственно.

  3. Создайте раздел реестра HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\EventLog\Application\SvcName и добавьте в этот раздел следующие значения реестра.

    Значение Тип Описание
    EventMessageFile = dll_path REG_SZ Путь к библиотеке DLL только для ресурсов, содержащей строки, которые служба может записывать в журнал событий.
    TypesSupported = 0x00000007 REG_DWORD Битовая маска, указывающая поддерживаемые типы событий. Значение 0x000000007 указывает, что поддерживаются все типы.

     

Тестирование службы

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

Проверка службы

  1. В панель управления запустите приложение Службы. (На следующих шагах используйте клавишу F5 для обновления экрана после выполнения команды, которая изменяет сведения в приложении Служб .)

  2. Выполните следующую команду, чтобы установить службу:

    установка svc

    Служба записывает сообщение "Служба успешно установлена" в консоль, если операция выполнена успешно или сообщение об ошибке в противном случае.

    Если установка службы завершается успешно, служба отображается в приложении Служб . Обратите внимание, что для параметра Name задано значение "SvcName", поле Описание и Состояние пусты, а для параметра Тип запуска задано значение "Вручную".

  3. Выполните следующую команду, чтобы запустить службу:

    Svccontrol start SvcName

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

    Если служба запускается успешно, для параметра Состояние устанавливается значение "Запущено". Код в функции ServiceMain выполняется SCM. При возникновении ошибки служба запишет сообщение об ошибке в журнал событий. Это сообщение содержит имя функции, которая завершилась сбоем, и код ошибки, возвращенный при сбое.

  4. Выполните следующую команду, чтобы обновить описание службы:

    svcconfig describe SvcName

    Программа конфигурации службы записывает сообщение "Описание службы успешно обновлено" в консоль, если операция выполнена успешно, или сообщение об ошибке в противном случае.

    Если обновление выполнено успешно, для параметра Description устанавливается значение "Это описание теста".

  5. Выполните следующую команду, чтобы запросить конфигурацию службы:

    запрос svcconfig SvcName

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

  6. Выполните следующую команду, чтобы изменить DACL службы:

    svccontrol dacl SvcName

    Программа настройки службы записывает сообщение "DaCL службы успешно обновлено" в консоль, если операция выполнена успешно, или сообщение об ошибке в противном случае.

  7. Выполните следующую команду, чтобы отключить службу:

    svcconfig: отключение SvcName

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

    Если служба успешно отключена, для параметра Тип запуска устанавливается значение "Отключено".

  8. Выполните следующую команду, чтобы включить службу:

    svcconfig enable SvcName

    Программа конфигурации службы записывает сообщение "Служба успешно включена" в консоль, если операция выполнена успешно или сообщение об ошибке в противном случае.

    Если служба включена успешно, для параметра Тип запуска устанавливается значение "Вручную".

  9. Выполните следующую команду, чтобы остановить службу:

    Svccontrol stop SvcName

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

    Если служба успешно останавливается, состояние будет пустым.

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

  10. Выполните следующую команду, чтобы удалить службу:

    svcconfig delete SvcName

    Программа конфигурации службы записывает сообщение "Служба успешно удалена" в консоль, если операция выполнена успешно или сообщение об ошибке в противном случае.

    Если служба успешно удалена, она больше не отображается в приложении Служб . (Обратите внимание, что при попытке удалить службу, которая не остановлена, операция будет выполнена успешно, но для параметра Тип запуска задано значение "Отключено", и запись службы будет удалена при перезапуске системы или при завершении работы службы с помощью диспетчера задач.)

Использование служб