win32_start_service_ctrl_dispatcher
(PECL win32service >=0.1.0)
win32_start_service_ctrl_dispatcher —
Регистрирует скрипт в Диспетчере управления службами, чтобы он действовал как служба с заданным именем
Описание
win32_start_service_ctrl_dispatcher(
string $name
,
bool $gracefulMode
= true):
void
После запуска процесс службы выполняет два действия. Первое — сообщает
Диспетчеру управления службами, что служба запустилась. Для этого вызывают функцию
win32_set_service_status() с константой WIN32_SERVICE_RUNNING
.
Функцию вызывают с константой WIN32_SERVICE_START_PENDING
,
когда требуется выполнить какой-то длительный процесс до фактического запуска службы.
Второе — продолжает «отмечаться» в Диспетчере управления службами, чтобы диспетчер определял,
требуется ли прекратить работу службы. Для этого периодически вызывают
функцию win32_get_last_control_message() и правильно обрабатывают
кода возврата.
Предостережение
С версии 0.2.0 функция работает только через SAPI-интерфейс CLI.
Через другие SAPI-интерфейсы функция не работает.
Возвращаемые значения
Функция не возвращает значения после выполнения.
До версии 1.0.0 Функция возвращает
WIN32_NO_ERROR
в случае успешного завершения , false
, если возникла проблема с параметрами,
или
код ошибки Win32, если возникла ошибка.
Ошибки
До версии 1.0.0 при вызове не через SAPI-интерфейс CLI
функция выдаёт ошибку уровня E_ERROR
.
С версии 1.0.0 при вызове не через SAPI-интерфейс CLI
функция выбрасывает исключение Win32ServiceException.
Примеры
Пример #1 Пример использования функции win32_start_service_ctrl_dispatcher()
Проверим, запустили ли сервис в Диспетчере управления службами.
<?php
if (!win32_start_service_ctrl_dispatcher('dummyphp')) {
die("Меня, вероятно, не запустили в Диспетчере управления службами");
}
win32_set_service_status(WIN32_SERVICE_START_PENDING);
// Какой-то длительный процесс для обработки и запуска службы
win32_set_service_status(WIN32_SERVICE_RUNNING);
while (WIN32_SERVICE_CONTROL_STOP != win32_get_last_control_message()) {
# Здесь выполняются какие-то действия, которые не занимают больше 30 секунд
# перед переходом в цикл
}
?>