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'));
*/
?>
win32_start_service_ctrl_dispatcher
(PECL win32service SVN)
win32_start_service_ctrl_dispatcher — Registra el script con el ACS, por lo que puede actuar como el servicio con el nombre dado
Descripción
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.
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
- win32_set_service_status() - Actualiza el estado del servicio
- win32_get_last_control_message() - Devuelve el último mensaje de control que fue enviado a este servicio
- Códigos de Error de Win32
<?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);
?>
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.
