Compartir a través de


Punto de entrada de servicio

Por lo general, los servicios se escriben como aplicaciones de consola. El punto de entrada de una aplicación de consola es su función principal . La función principal recibe argumentos del valor ImagePath de la clave del Registro para el servicio. Para obtener más información, vea la sección Comentarios de la función CreateService .

Cuando el SCM inicia un programa de servicio, espera a que llame a la función StartServiceCtrlDispatcher . Use las instrucciones siguientes.

  • Un servicio de tipo SERVICE_WIN32_OWN_PROCESS debe llamar inmediatamente a StartServiceCtrlDispatcher desde su subproceso principal. Puede realizar cualquier inicialización después de que se inicie el servicio, como se describe en Service ServiceMain Function.
  • Si el tipo de servicio es SERVICE_WIN32_SHARE_PROCESS y hay una inicialización común para todos los servicios del programa, puede realizar la inicialización en el subproceso principal antes de llamar a StartServiceCtrlDispatcher, siempre y cuando tarde menos de 30 segundos. De lo contrario, debe crear otro subproceso para realizar la inicialización común, mientras que el subproceso principal llama a StartServiceCtrlDispatcher. Todavía debe realizar cualquier inicialización específica del servicio después de que se inicie el servicio.

La función StartServiceCtrlDispatcher toma una estructura de SERVICE_TABLE_ENTRY para cada servicio incluido en el proceso. Cada estructura especifica el nombre del servicio y el punto de entrada del servicio. Para obtener un ejemplo, consulte Escritura de la función principal del Programa de servicios.

Si StartServiceCtrlDispatcher se realiza correctamente, el subproceso que realiza la llamada no devuelve hasta que todos los servicios en ejecución del proceso hayan entrado en el estado de SERVICE_STOPPED. El SCM envía solicitudes de control a este subproceso a través de una canalización con nombre. El subproceso actúa como distribuidor de control y realiza las siguientes tareas:

  • Cree un nuevo subproceso para llamar al punto de entrada adecuado cuando se inicie un nuevo servicio.
  • Llame a la función de controlador adecuada para controlar las solicitudes de control de servicio.

Escribir la función principal de un programa de servicio