Función StartServiceA (winsvc.h)
Inicia un servicio.
Sintaxis
BOOL StartServiceA(
[in] SC_HANDLE hService,
[in] DWORD dwNumServiceArgs,
[in, optional] LPCSTR *lpServiceArgVectors
);
Parámetros
[in] hService
Identificador del servicio. La función OpenService o CreateService devuelve este identificador y debe tener el derecho de acceso SERVICE_START. Para obtener más información, consulte derechos de acceso y seguridad del servicio.
[in] dwNumServiceArgs
Número de cadenas de la matriz de lpServiceArgVectors. Si lpServiceArgVectors es NULL, este parámetro puede ser cero.
[in, optional] lpServiceArgVectors
Las cadenas terminadas en null que se van a pasar a la función ServiceMain de
Los servicios de controladores no reciben estos argumentos.
Valor devuelto
Si la función se ejecuta correctamente, el valor devuelto es distinto de cero.
Si se produce un error en la función, el valor devuelto es cero. Para obtener información de error extendida, llame a GetLastError.
El administrador de control de servicios puede establecer los siguientes códigos de error. Otros pueden establecerse mediante las funciones del Registro a las que llama el administrador de control de servicios.
Código devuelto | Descripción |
---|---|
|
El identificador no tiene derecho de acceso SERVICE_START. |
|
El identificador no es válido. |
|
No se encontró el archivo binario del servicio. |
|
Ya se está ejecutando una instancia del servicio. |
|
La base de datos está bloqueada. |
|
El servicio depende de un servicio que no exista o se haya marcado para su eliminación. |
|
El servicio depende de otro servicio que no se haya iniciado. |
|
El servicio se ha deshabilitado. |
|
El servicio no se inició debido a un error de inicio de sesión. Este error se produce si el servicio está configurado para ejecutarse en una cuenta que no tiene el derecho "Iniciar sesión como servicio". |
|
El servicio se ha marcado para su eliminación. |
|
No se pudo crear un subproceso para el servicio. |
|
El proceso para el servicio se inició, pero no llamó a StartServiceCtrlDispatcher, o el subproceso que llamó a StartServiceCtrlDispatcher puede bloquearse en una función de controlador de control. |
Observaciones
Cuando se inicia un servicio de controlador, la función StartService no devuelve hasta que el controlador de dispositivo haya terminado de inicializarse.
Cuando se inicia un servicio, Service Control Manager (SCM) genera el proceso de servicio, si es necesario. Si el servicio especificado comparte un proceso con otros servicios, es posible que el proceso necesario ya exista. La función StartService no espera la primera actualización de estado del nuevo servicio, ya que puede tardar un tiempo. En su lugar, devuelve cuando el SCM recibe una notificación del distribuidor de control de servicio que el ServiceMain subproceso de este servicio se creó correctamente.
El SCM establece los siguientes valores de estado predeterminados antes de devolver de StartService:
- El estado actual del servicio se establece en SERVICE_START_PENDING.
- Los controles aceptados se establecen en ninguno (cero).
- El valor de CheckPoint se establece en cero.
- La hora waitHint se establece en 2 segundos.
Un servicio no puede llamar a StartService durante la inicialización. El motivo es que el SCM bloquea la base de datos de control de servicio durante la inicialización, por lo que se bloqueará una llamada a StartService. Después de que el servicio informe al SCM que se ha iniciado correctamente, puede llamar a StartService.
Al igual que con ControlService, StartService bloqueará durante 30 segundos si algún servicio está ocupado controlando un código de control. Si el servicio ocupado todavía no ha devuelto de su función de controlador cuando expira el tiempo de espera, StartService produce un error con ERROR_SERVICE_REQUEST_TIMEOUT. Esto se debe a que el SCM solo procesa una notificación de control de servicio a la vez.
Ejemplos
Para obtener un ejemplo, consulte Iniciar un servicio.
Nota
El encabezado winsvc.h define StartService como alias que selecciona automáticamente la versión ANSI o Unicode de esta función en función de la definición de la constante de preprocesador UNICODE. La combinación del uso del alias neutral de codificación con código que no es neutral de codificación puede dar lugar a errores de coincidencia que dan lugar a errores de compilación o tiempo de ejecución. Para obtener más información, vea Conventions for Function Prototypes.
Requisitos
Requisito | Valor |
---|---|
cliente mínimo admitido | Windows XP [solo aplicaciones de escritorio] |
servidor mínimo admitido | Windows Server 2003 [solo aplicaciones de escritorio] |
de la plataforma de destino de |
Windows |
encabezado de |
winsvc.h (incluya Windows.h) |
biblioteca de |
Advapi32.lib |
DLL de |
Advapi32.dll |
Consulte también
queryServiceDynamicInformation de
de inicio del servicio