Комплексный пример услуги
Разделы в этом разделе образуют полный пример службы:
- Sample.mc (содержит сообщения об ошибках)
- Svc.cpp (содержит код службы)
- SvcConfig.cpp (содержит код конфигурации службы)
- SvcControl.cpp (содержит код управления службой)
Создание службы
Процедура ниже описывает, как создать службу и зарегистрировать DLL файла сообщения о событии.
Чтобы разработать службу и зарегистрировать DLL сообщений об событиях
Создайте библиотеку DLL сообщений из Sample.mc, выполнив следующие действия.
- mc -U sample.mc
- rc -r sample.rc
- ссылка -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 для обновления дисплея после выполнения команды, которая изменяет сведения в приложении Services.)
Выполните следующую команду, чтобы установить службу:
svc install
Служба записывает сообщение "Служба успешно установлена" в консоль, если операция завершается успешно или сообщение об ошибке в противном случае.
Если установка службы выполнена успешно, служба отображается в приложении служб . Обратите внимание, что имя имеет значение "SvcName", Description и Status пусты, а для типа запуска задано значение "Вручную".
Выполните следующую команду, чтобы запустить службу:
svccontrol start SvcName
Если операция выполнена успешно, программа управления службами записывает сообщение "Запуск службы ожидается..." и затем "Служба успешно запущена" в консоли. В противном случае программа записывает сообщение об ошибке в консоль.
Если служба успешно запущена, состояние установлено как "Запущено". Код в функции ServiceMain выполняется системой управления службами (SCM). При возникновении ошибки служба записывает сообщение об ошибке в журнал событий. Это сообщение содержит имя функции, которая завершилась сбоем, и код ошибки, возвращенный при сбое.
Выполните следующую команду, чтобы обновить описание службы:
svcconfig описать SvcName
Программа конфигурации службы записывает сообщение "Описание службы обновлено успешно" в консоль, если операция завершается успешно или сообщение об ошибке в противном случае.
Если обновление выполнено успешно, описания задано значение "Это тестовое описание".
Выполните следующую команду, чтобы запросить конфигурацию службы:
svcconfig query SvcName
Программа конфигурации службы записывает сведения о конфигурации службы в консоль, если операция успешна, или записывает сообщение об ошибке в противном случае.
Выполните следующую команду, чтобы изменить DACL службы.
svccontrol dacl SvcName
Программа конфигурации службы записывает сообщение "Служба DACL обновлена успешно" в консоль, если операция завершается успешно или сообщение об ошибке в противном случае.
Выполните следующую команду, чтобы отключить службу:
svcconfig отключите SvcName
Программа конфигурации службы записывает сообщение "Служба отключена успешно" в консоль, если операция завершается успешно или сообщение об ошибке в противном случае.
Если служба отключена успешно, тип запуска имеет значение "Отключено".
Выполните следующую команду, чтобы включить службу:
svcconfig enable SvcName
Программа конфигурации службы записывает сообщение "Служба включена успешно" в консоль, если операция завершается успешно или сообщение об ошибке в противном случае.
Если служба включена успешно, типа запуска имеет значение "Вручную".
Выполните следующую команду, чтобы остановить службу:
svccontrol останови SvcName
Если операция выполнена успешно, программа управления службами записывает сообщение "Ожидание остановки службы...", а затем записывает "Служба успешно остановлена" в консоль. В противном случае программа записывает сообщение об ошибке в консоль.
Если служба успешно останавливается, статус пуст.
Если служба не остановится, программа управления службами записывает сообщение об ошибке в журнал событий, включающее имя функции, которая завершилась сбоем, и код ошибки, возвращенный при сбое.
Выполните следующую команду, чтобы удалить службу:
svcconfig delete SvcName
Программа конфигурации службы записывает сообщение "Служба успешно удалена" в консоль, если операция завершается успешно или сообщение об ошибке в противном случае.
Если служба успешно удалена, она больше не отображается в приложении служб. (Обратите внимание, что при попытке удалить службу, которая не остановлена, операция завершается успешно, но тип запуска имеет значение "Отключено", а запись службы будет удалена при перезагрузке системы или при завершении службы с помощью диспетчера задач.)
Связанные разделы