Поделиться через


Комплексный пример услуги

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

  • 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. ссылка -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 для обновления дисплея после выполнения команды, которая изменяет сведения в приложении Services.)

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

    svc install

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

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

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

    svccontrol start SvcName

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

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

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

    svcconfig описать SvcName

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

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

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

    svcconfig query SvcName

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

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

    svccontrol dacl SvcName

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

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

    svcconfig отключите SvcName

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

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

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

    svcconfig enable SvcName

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

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

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

    svccontrol останови SvcName

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

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

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

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

    svcconfig delete SvcName

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

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

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