win32_create_service

(PECL win32service >=0.1.0)

win32_create_serviceCrea una nueva entrada de servicio en la base de datos del ACS

Descripción

win32_create_service(array $details, string $machine = ?): mixed

Parámetros

details

Una matriz con los detalles del servicio:

service

El nombre corto del servicio. Éste es el nombre que se debe usar para controlar el servicio utilizando el comando net. El servicio debe ser único (dos servicios no pueden compartir el mismo nombre), y lo ideal sería evitar que el nombre contenga espacios.

display

El nombre para mostrar del servicio. Éste es el nombre que se verá en la Aplicación de Servicios.

description

La descripción larga del servicio. Ésta es la descripción que verá en el Services Applet.

user

El nombre de la cuenta de usuario bajo la cuál se quiere ejecutar el servicio. Si se omite, el servicio se ejecutará como la cuenta LocalSystem. Si se especifica el nombre de usuario, también se debe proporcionar una contraseña.

password

La contraseña que se corresponde con user.

path

La ruta completa de módulo ejecutable que será lanzado cuando el servicio es iniciado. Si se omite, se usará la ruta del proceso de PHP actual.

params

Parámetros de línea de comandos a pasar al servicio cuando se inicia. Si quiere ejecutar un script de PHP como un servicio, el primer parámetro debería ser la ruta completa del script de PHP que intenta ejecutar. Si el nombre del script o la ruta contiene espacios encierre la ruta completa del script PHP con ".

load_order

Controla el orden de carga. Ésto aún no está completamente soportado.

svc_type

Establece el tipo de servicio. Si se omite, el valor por defecto es WIN32_SERVICE_WIN32_OWN_PROCESS. No cambie esto a menos que sepa lo que está haciendo.

start_type

Especifica cómo debería iniciarse el servicio. Por defecto es WIN32_SERVICE_AUTO_START lo que significa que el servicio será lanzado cuando se encienda la máquina.

error_control

Informa al ACS qué debería hacer cuando detecta un problema con el servicio. Por defecto es WIN32_SERVER_ERROR_IGNORE. El cambio de este valor no está aún soportado completamente.

delayed_start

Si delayed_start está establecido a true, informará al SCM que este servicio debería ser iniciado después que otros servicios con autoinicio, más una pequeña demora.

Cualquier servicio puede ser marcado como un servicio con autoinicio demorado; sin embargo este ajuste no tiene efecto a menos que el parámetro start_type del servicio sea WIN32_SERVICE_AUTO_START.

Este ajuste sólo es aplicable en Windows Vista y Windows Server 2008 o superior.

base_priority

Para reducir el impacto en el uso del procesador, puede ser necesario para establecer una prioridad base más baja de lo normal.

base_priority puede establecerse a una de las constantes definidas en Clases de Prioridad Base de Win32.

machine

El nombre opcional de la máquina en la que quiere crear el servicio. Si se omite, se usará la máquina local.

Valores devueltos

Devuelve WIN32_NO_ERROR 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_create_service()

Crear un servicio con el nombre abreviado 'dummyphp'.

<?php
$x
= win32_create_service(array(
'service' => 'dummyphp', # el nombre de su servicio
'display' => 'ejemplo de servicio PHP', # descripción abreviada
'description' => 'Este es un servicio de Windows creado usando PHP.', # descripción larga
'params' => '"' . __FILE__ . '" run', # ruta del script y parámetros
));
debug_zval_dump($x);
?>

Ver también

add a note

User Contributed Notes 2 notes

up
1
pauljamesthomson at gmail dot com
16 years ago
Other start_type values:

0x00000002: A service started automatically by the service control manager during system startup. For more information, see Automatically Starting Services.

0x00000000: A device driver started by the system loader. This value is valid only for driver services.

0x00000003: A service started by the service control manager when a process calls the win32_start_service() function.

0x00000004: A service that cannot be started. Attempts to start the service result in the error code

0x00000001: A device driver started by the IoInitSystem function. This value is valid only for driver services.

I can confirm that 0x00000003 works as expected (service is created, but must be started manually).

More here:

http://msdn2.microsoft.com/en-us/library/ms682450.aspx
up
0
Anonymous
12 years ago
[An example of how to create a Windows service. Evaluate code first and use at your own risk!]

<?php

//No timeouts, Flush Content immediatly
set_time_limit(0);
ob_implicit_flush();

//Service Settings
$phpPath = "D:\\php\\php5.2.9";
$ServiceName = 'phpServiceName';
$ServiceDisplay = 'phpDisplayName';

//Windows Service Control
$ServiceAction = "status";
//$ServiceAction = "debug";
if ( isset($_GET['ServiceAction']) and strlen($_GET['ServiceAction']) ) {
$ServiceAction = addslashes($_GET['ServiceAction']);
} else if ( isset(
$argv) and isset($argv[1]) and strlen($argv[1]) ) {
$ServiceAction = $argv[1];
}
if(
$ServiceAction == "status" ) {
$ServiceStatus = win32_query_service_status($ServiceName);
if (
$ServiceStatus['CurrentState'] == WIN32_SERVICE_STOPPED ) {
echo
"Service Stopped\n\n";
} else if (
$ServiceStatus['CurrentState'] == WIN32_SERVICE_START_PENDING ) {
echo
"Service Start Pending\n\n";
} else if (
$ServiceStatus['CurrentState'] == WIN32_SERVICE_STOP_PENDING ) {
echo
"Service Stop Pending\n\n";
} else if (
$ServiceStatus['CurrentState'] == WIN32_SERVICE_RUNNING ) {
echo
"Service Running\n\n";
} else if (
$ServiceStatus['CurrentState'] == WIN32_SERVICE_CONTINUE_PENDING ) {
echo
"Service Continue Pending\n\n";
} else if (
$ServiceStatus['CurrentState'] == WIN32_SERVICE_PAUSE_PENDING ) {
echo
"Service Pause Pending\n\n";
} else if (
$ServiceStatus['CurrentState'] == WIN32_SERVICE_PAUSED ) {
echo
"Service Paused\n\n";
} else{
echo
"Service Unknown\n\n";
}
exit;
} else if (
$ServiceAction == "install" ) {
//Install Windows Service
win32_create_service( Array(
'service' => $ServiceName,
'display' => $ServiceDisplay,
'params' => __FILE__ . " run",
'path' => $phpPath."\\php.exe",
));
echo
"Service Installed\n\n";
exit;
} else if (
$ServiceAction == "uninstall" ) {
//Remove Windows Service
win32_delete_service($ServiceName);
echo
"Service Removed\n\n";
exit;
} else if(
$ServiceAction == "start") {
//Start Windows Service
win32_start_service($ServiceName);
echo
"Service Started\n\n";
exit;
} else if(
$ServiceAction == "stop" ) {
//Stop Windows Service
win32_stop_service($ServiceName);
echo
"Service Stopped\n\n";
exit;
} else if (
$ServiceAction == "run" ) {
//Run Windows Service
win32_start_service_ctrl_dispatcher($ServiceName);
win32_set_service_status(WIN32_SERVICE_RUNNING);
} else if (
$ServiceAction == "debug" ) {
//Debug Windows Service
set_time_limit(10);
} else {
exit();
}

//Server Loop
while (1) {
//Handle Windows Service Request
usleep(100*1000);
if (
$ServiceAction == "run" ) {
switch (
win32_get_last_control_message() ) {
case
WIN32_SERVICE_CONTROL_CONTINUE:
break;
case
WIN32_SERVICE_CONTROL_INTERROGATE:
win32_set_service_status(WIN32_NO_ERROR);
break;
case
WIN32_SERVICE_CONTROL_STOP:
win32_set_service_status(WIN32_SERVICE_STOPPED);
exit;
default:
win32_set_service_status(WIN32_ERROR_CALL_NOT_IMPLEMENTED);
}
}
//User Loop
sleep(1);
echo
"\n<BR>YOUR CODE HERE";
}

//Exit
if ( $ServiceAction == "run" ) {
win32_set_service_status(WIN32_SERVICE_STOPPED);
}
exit();
?>
To Top