win32_start_service_ctrl_dispatcher
(PECL win32service >=0.1.0)
win32_start_service_ctrl_dispatcher — Registra o script no GCS, para que ele possa atuar como o serviço com o nome fornecido
Descrição
win32_start_service_ctrl_dispatcher(
string $name
,
bool $gracefulMode
= true):
void
Uma vez iniciado, o processo de serviço deve fazer duas coisas. A primeira é informar
o Gerenciador de Controle de Serviço que o serviço está em execução. Isto é conseguido
chamando win32_set_service_status() com a
constante WIN32_SERVICE_RUNNING
. Se for necessário executar
algum processo demorado antes que o serviço esteja realmente em execução, pode
ser usada a constante WIN32_SERVICE_START_PENDING
. A
segunda é continuar a fazer registro com o Gerenciador de Controle de Serviço para que
ele possa determinar se deve ser encerrado. Isso é conseguido chamando periodicamente
a função win32_get_last_control_message() e manipulando o
código de retorno de forma adequada.
Cuidado
Desde a versão 0.2.0, esta função funciona somente no SAPI CLI. Em outros SAPI,
esta função é desabilitada.
Valor Retornado
Nenhum valor é retornado.
Antes da versão 1.0.0, retornava WIN32_NO_ERROR
em caso de sucesso, false
se houver um problema com os parâmetros ou um Código de Erro Win32 em caso de falha.
Erros/Exceções
Antes da versão 1.0.0, se o SAPI não for "cli"
, esta função emite um
erro de nível E_ERROR
.
A partir da versão, lança uma exceção
Win32ServiceException se o SAPI não for
"cli"
.
Exemplos
Exemplo #1 Um exemplo de win32_start_service_ctrl_dispatcher()
Verifica se o serviço está sendo executado no GCS.
<?php
if (!win32_start_service_ctrl_dispatcher('dummyphp')) {
die("Provavelmente não estou sendo executado no Gerenciador de Controle de Serviço");
}
win32_set_service_status(WIN32_SERVICE_START_PENDING);
// Algum processo demorado para colocar este serviço em funcionamento.
win32_set_service_status(WIN32_SERVICE_RUNNING);
while (WIN32_SERVICE_CONTROL_STOP != win32_get_last_control_message()) {
# faça algum trabalho aqui, tentando não demorar mais do que cerca de 30 segundos
# antes de voltar ao loop novamente
}
?>