Пример полной службы
Разделы этого раздела содержат полный пример службы:
- Sample.mc (содержит сообщения об ошибках)
- Svc.cpp (содержит код службы)
- SvcConfig.cpp (содержит код конфигурации службы)
- SvcControl.cpp (содержит код элемента управления службой)
Создание службы
В следующей процедуре описывается, как создать службу и зарегистрировать библиотеку DLL для сообщений о событиях.
Сборка службы и регистрация библиотеки DLL сообщений о событиях
Создайте библиотеку DLL-библиотеки сообщений из Sample.mc, выполнив следующие действия.
- mc -U sample.mc
- rc -r sample.rc
- link -dll -noentry -out:sample.dll sample.res
Сборка Svc.exe, SvcConfig.exe и SvcControl.exe из Svc.cpp, SvcConfig.cpp и SvcControl.cpp соответственно.
Создайте раздел реестра HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\EventLog\Application\SvcName и добавьте в этот раздел следующие значения реестра.
Значение Тип Описание EventMessageFile = dll_path REG_SZ Путь к библиотеке DLL только для ресурсов, содержащей строки, которые служба может записывать в журнал событий. TypesSupported = 0x00000007 REG_DWORD Битовая маска, указывающая поддерживаемые типы событий. Значение 0x000000007 указывает, что поддерживаются все типы.
Тестирование службы
В следующей процедуре описывается, как протестировать службу.
Проверка службы
В панель управления запустите приложение Службы. (На следующих шагах используйте клавишу F5 для обновления экрана после выполнения команды, которая изменяет сведения в приложении Служб .)
Выполните следующую команду, чтобы установить службу:
установка svc
Служба записывает сообщение "Служба успешно установлена" в консоль, если операция выполнена успешно или сообщение об ошибке в противном случае.
Если установка службы завершается успешно, служба отображается в приложении Служб . Обратите внимание, что для параметра Name задано значение "SvcName", поле Описание и Состояние пусты, а для параметра Тип запуска задано значение "Вручную".
Выполните следующую команду, чтобы запустить службу:
Svccontrol start SvcName
Если операция выполнена успешно, программа управления службой записывает сообщение "Ожидание запуска службы..." а затем "Служба успешно запущена" в консоль. В противном случае программа записывает сообщение об ошибке в консоль.
Если служба запускается успешно, для параметра Состояние устанавливается значение "Запущено". Код в функции ServiceMain выполняется SCM. При возникновении ошибки служба запишет сообщение об ошибке в журнал событий. Это сообщение содержит имя функции, которая завершилась сбоем, и код ошибки, возвращенный при сбое.
Выполните следующую команду, чтобы обновить описание службы:
svcconfig describe SvcName
Программа конфигурации службы записывает сообщение "Описание службы успешно обновлено" в консоль, если операция выполнена успешно, или сообщение об ошибке в противном случае.
Если обновление выполнено успешно, для параметра Description устанавливается значение "Это описание теста".
Выполните следующую команду, чтобы запросить конфигурацию службы:
запрос svcconfig SvcName
Программа настройки службы записывает сведения о конфигурации службы в консоль, если операция выполнена успешно, или если в противном случае появится сообщение об ошибке.
Выполните следующую команду, чтобы изменить DACL службы:
svccontrol dacl SvcName
Программа настройки службы записывает сообщение "DaCL службы успешно обновлено" в консоль, если операция выполнена успешно, или сообщение об ошибке в противном случае.
Выполните следующую команду, чтобы отключить службу:
svcconfig: отключение SvcName
Программа настройки службы записывает сообщение "Служба успешно отключена" в консоль, если операция выполнена успешно или сообщение об ошибке в противном случае.
Если служба успешно отключена, для параметра Тип запуска устанавливается значение "Отключено".
Выполните следующую команду, чтобы включить службу:
svcconfig enable SvcName
Программа конфигурации службы записывает сообщение "Служба успешно включена" в консоль, если операция выполнена успешно или сообщение об ошибке в противном случае.
Если служба включена успешно, для параметра Тип запуска устанавливается значение "Вручную".
Выполните следующую команду, чтобы остановить службу:
Svccontrol stop SvcName
Если операция выполнена успешно, программа управления службой записывает сообщение "Ожидание остановки службы..." а затем "Служба остановлена успешно" в консоль. В противном случае программа записывает сообщение об ошибке в консоль.
Если служба успешно останавливается, состояние будет пустым.
Если служба не может остановиться, программа управления службой записывает сообщение об ошибке в журнал событий, включающее имя функции, которая завершилась сбоем, и код ошибки, возвращенный при сбое.
Выполните следующую команду, чтобы удалить службу:
svcconfig delete SvcName
Программа конфигурации службы записывает сообщение "Служба успешно удалена" в консоль, если операция выполнена успешно или сообщение об ошибке в противном случае.
Если служба успешно удалена, она больше не отображается в приложении Служб . (Обратите внимание, что при попытке удалить службу, которая не остановлена, операция будет выполнена успешно, но для параметра Тип запуска задано значение "Отключено", и запись службы будет удалена при перезапуске системы или при завершении работы службы с помощью диспетчера задач.)
Связанные темы