FFL  1.0
Finfly Foundation Library
Классы | Открытые типы | Открытые члены | Открытые статические члены | Защищенные данные
Класс ffl::cssc::service

Базовая служба. Подробнее...

Граф наследования:ffl::cssc::service:
Inheritance graph
[см. легенду]

Полный список членов класса

Классы

class  console
 Контекст запуска как консольного приложения. Подробнее...
class  context
 Контекст выполнения службы. Подробнее...
class  scm
 Контекст запуска c SCM. Подробнее...

Открытые типы

enum  type { FILE_SYSTEM_DRIVER = SERVICE_FILE_SYSTEM_DRIVER, KERNEL_DRIVER = SERVICE_KERNEL_DRIVER, WIN32_OWN_PROCESS = SERVICE_WIN32_OWN_PROCESS, WIN32_SHARE_PROCESS = SERVICE_WIN32_SHARE_PROCESS }
 Тип службы. Подробнее...
enum  status {
  CONTINUE_PENDING = SERVICE_CONTINUE_PENDING, PAUSE_PENDING = SERVICE_PAUSE_PENDING, PAUSED = SERVICE_PAUSED, RUNNING = SERVICE_RUNNING,
  START_PENDING = SERVICE_START_PENDING, STOP_PENDING = SERVICE_STOP_PENDING, STOPPED = SERVICE_STOPPED
}
 Состояние службы. Подробнее...
enum  accept {
  NOTHING = 0, NETBINDCHANGE = SERVICE_ACCEPT_NETBINDCHANGE, PARAMCHANGE = SERVICE_ACCEPT_PARAMCHANGE, PAUSE_CONTINUE = SERVICE_ACCEPT_PAUSE_CONTINUE,
  SHUTDOWN = SERVICE_ACCEPT_SHUTDOWN, STOP = SERVICE_ACCEPT_STOP, HARDWAREPROFILECHANGE = SERVICE_ACCEPT_HARDWAREPROFILECHANGE, POWEREVENT = SERVICE_ACCEPT_POWEREVENT
}
 Обрабатываемая команда. Подробнее...

Открытые члены

 service (context &_c) throw ()
virtual void stop () throw ()
 Обработать команду на остановку службы.

Открытые статические члены

static const char * spell (type _type) throw ()
 Получить текстовое представление типа службы.
static const char * spell (status _status) throw ()

Защищенные данные

contextContext

Подробное описание

Базовая служба.

Служба - это поток, который выполняется в фоновом режиме и управляется посредством диспетчера управления службами (Service Control Manager - SCM). Служба выполняется в рамках своего родительского процесса и использует данные этого процесса. Процесс может содержать одну или несколько служб.

Базовая служба - это абстрактный класс, который реализует интерфейс службы с SCM и является основой для создания служб. Базовая служба должна иметь метод service::run, который содержит исполняемый код службы. Аргументы этого метода аналогичны аргументам функции main. При запуске службы из SCM нулевой аргумент содержит имя службы.

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

Процесс с единственной службой может быть определен следующим образом:

                                class myservice:public service
                                {
                                        void run(int _argc, const char* _argv[]) throw()
                                        {
                                                ...
                                        }
                                };

                                FFL_CSSC_SERVICE(myservice, "MyService");

В ходе выполнения служба проходит ряд состояний (service::status). Служба должна сообщать о своем состоянии и об изменении состояний SCM, отправляя соответствующие сообщения. Служба отправляет сообщения SCM, используя контекст выполнения службы (service::context).

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

dot_inline_dotgraph_1.png

Состояние service::RUNNING, service::STOPPED, service::PAUSED являются основаными состояниями службы. В каждом из этих состояний службы может находиться произвольное время. Состояние service::RUNNING - это основное состояние, в котором служба выполняет свои основные функции. Состояния service::START_PENDING, service::PAUSE_PENDING, service::CONTINUE_PENDING, service::STOP_PENDING являются переходными состояниями и соответветствуют переходам из одного основного состояния в другое. Служба находится в переходном состоянии обычно непродолжительное время, и в это время основные функции службы не выполняются (обычно в это время происходит выделение или освобождение ресурсов, необходимых службе).

Для того чтобы SCM мог управлять службой (запускать, останавливать службу, отображать состояние службы) служба должна быть зарегистрирована в реестре SCM. Для регистрации службы, а также для управления службой используется системная команда sc (для выполнения этой команды требуется запуск командной консоли от имени администратора). Далее приведены примеры команд SCM для управления службами.

Создание службы в реестре SCM (процесс с единственной службой, служба запускается по требованию):

				sc create	<Идентификатор службы> 
					binPath= <Путь к исполняемому файлу> 
					displayname= <Развернутое описание службы>
			

Вывод параметров службы (контроль записи в реестре SCM):

				sc qc <Идентификатор службы>
			

Запуск службы:

				sc start <Идентификатор службы> <аргумент 1> <аргумент 2> ...
			

Вывод текущего состояния службы:

				sc query <Идентификатор службы>
			

Удаление службы из реестра SCM:

				sc delete <Идентификатор службы>
			

Перечисления

Обрабатываемая команда.

Элементы перечислений:
NETBINDCHANGE 

Изменение сетевого подключения.

Служба обрабатывает следующие команды: NETBINDADD, NETBINDREMOVE, NETBINDENABLE, NETBINDDISABLE.

PARAMCHANGE 

Измеение параметров процесса.

Служба обрабатывает следующие команды: PARAMCHANGE.

PAUSE_CONTINUE 

Служба может быть пристановлена и возобновлена.

SHUTDOWN 

Служба обрабатывает команду останова системы.

Служба обрабатывает следующие команды: SHUTDOWN.

STOP 

Служба может быть остановлена.

Служба обрабатывает следующие команды: STOP.

HARDWAREPROFILECHANGE 

Служба обрабатывает команду изменения профиля оборудования.

Служба обрабатывает следующие команды: HARDWAREPROFILECHANGE.

POWEREVENT 

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

Служба обрабатывает следующие команды: POWEREVENT.

Состояние службы.

Элементы перечислений:
CONTINUE_PENDING 

Ожидание продолжения.

PAUSE_PENDING 

Ожидание паузы.

PAUSED 

Пауза.

RUNNING 

Выполняется.

START_PENDING 

Ожидание запуска.

STOP_PENDING 

Ожидание остановки.

STOPPED 

Остановлен.

Тип службы.

Элементы перечислений:
FILE_SYSTEM_DRIVER 

Драйвер файловой системы.

KERNEL_DRIVER 

Драйвер устройства.

WIN32_OWN_PROCESS 

Процесс с одной службой.

WIN32_SHARE_PROCESS 

Процесс с несколькими службами.


Методы

const char * service::spell ( type  _type) throw () [static]

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

Аргументы:
[in]_typeТип службы.
Возвращает:
Текстовое представление типа службы.
virtual void ffl::cssc::service::stop ( ) throw () [inline, virtual]

Обработать команду на остановку службы.

Метод вызывается контекстом запуска службы если получена команда на остав службы. Метод в классе наследнике должен инициировать прекращение работы службы. Если выполнение службы может быть завершено немедленно, то служба переходит в состояние status::STOPPED. Если для завершения службы требуется время, то службы должна быть переведена в переходное состояние status::STOP_PENDING.

Переопределяется в ffl::cssc::multithreaded::service.


Объявления и описания членов классов находятся в файлах:
 Указатель Классы Пространства имен Файлы Функции Переменные Определения типов Перечисления Элементы перечислений Макросы