win32_start_service_ctrl_dispatcher

(PECL win32service >=0.1.0)

win32_start_service_ctrl_dispatcherRegistra el script con el ACS, por lo que puede actuar como el servicio con el nombre dado

Descripción

win32_start_service_ctrl_dispatcher(string $name): mixed

Cuando de lanza mediante el Administrador de Control de Servicios, se requiere un porceso de servicio para "registralo" con él para establecer la supervisión del servicio y las características de comunicación. Esta función lleva a cabo el registro produciendo un hilo para manejar la comunicación a bajo nivel con el adminstrador de control de servicios.

Una vez iniciado, el proceso de servicio debería hacer 2 cosas. La primera es llamar al Administrador de Control de Servicios que esté ejecutando el servicio. Esto se lleva a cabo llamando a win32_set_service_status() con la constante WIN32_SERVICE_RUNNING. Si necesita realizar algún proceso prolongado antes de que el servicio esté realmente ejecutándose, puede usar la constante WIN32_SERVICE_START_PENDING. Lo segundo es continuar registrando con el administrador de control de servicios por lo que puede determinar si debería finalizarse. Esto se lleva a cabo llamando periódicamente a win32_get_last_control_message() y manteniendo el código devuelto de manera apropiada.

Parámetros

name

El nombre corto del servicio, como se registró mediante win32_create_service().

Valores devueltos

Devuelve true en caso de éxito, false si hay un problema con los parámetros o Código de error Win32 en caso de error.

Ejemplos

Ejemplo #1 Un ejemplo de win32_start_service_ctrl_dispatcher()

Comprobar si el servicio se está ejecutando bajo el ACS.

<?php
if (!win32_start_service_ctrl_dispatcher('dummyphp')) {
die(
"Probablemente no esté ejecutándome bajo el administrador de control de servicios");
}

win32_set_service_status(WIN32_SERVICE_START_PENDING);

// Algún proceso prolongado para levantar este servicio y ejecutar.

win32_set_service_status(WIN32_SERVICE_RUNNING);

while (
WIN32_SERVICE_CONTROL_STOP != win32_get_last_control_message()) {
# hacer su trabajo aquí, intentando no tomar más de 30 segundos
# antes de ejecutar de nuevo el bucle
}
?>

Ver también

add a note add a note

User Contributed Notes 3 notes

up
0
andrea
13 years ago
Insert value of params between " if the string have a space:

<?php
// First you need to create a service, you only need to do this once
/*
win32_create_service(array(
    'service' => 'myphpservice',
    'display' => 'My PHP Service',
    'params' => '"c:\\my folder\myphpservice.php"',
    'path' => 'c:\\PHP\\php.exe'));
*/
?>
up
-1
dylan at nopower dot org
16 years ago
<?php
// First you need to create a service, you only need to do this once
/*
win32_create_service(array(
    'service' => 'myphpservice',
    'display' => 'My PHP Service',
    'params' => 'c:\\myphpservice.php',
    'path' => 'c:\\PHP\\php.exe'));
*/

$myservicename = 'myphpservice';

// Connect to service dispatcher and notify that startup was successful
if (!win32_start_service_ctrl_dispatcher($myservicename)) die('Could not connect to service :'.$myservicename);
win32_set_service_status(WIN32_SERVICE_RUNNING);

// Main Server Loop
while (1) {
    switch (
win32_get_last_control_message()) {
        case
WIN32_SERVICE_CONTROL_CONTINUE: break; // Continue server routine
       
case WIN32_SERVICE_CONTROL_INTERROGATE: win32_set_service_status(WIN32_NO_ERROR); break; // Respond with status
       
case WIN32_SERVICE_CONTROL_STOP: win32_set_service_status(WIN32_SERVICE_STOPPED); exit; // Terminate script
       
default: win32_set_service_status(WIN32_ERROR_CALL_NOT_IMPLEMENTED); // Add more cases to handle other service calls
   
}
   
   
// Main script goes here
   
   
sleep(10); // Run every 10 seconds
}
win32_set_service_status(WIN32_SERVICE_STOPPED);
?>
up
-2
Guibod
16 years ago
Don't try to call "win32_start_service_ctrl_dispatcher" too late in your code. You'd trigger a #2186 error : "The service is not responding to the control function." (from commande line) or a #1053 error : "The service did not respond to the start or control request in a timely fashion." (from services GUI).

Try not to load a bunch of PEAR classes before to register php script as Service like I did.

Another good hint, to get a verbose version of the return code, you can call "NET HELPMSG ###" from command line where ### is your error code.
To Top