Nota
O acesso a esta página requer autorização. Podes tentar iniciar sessão ou mudar de diretório.
O acesso a esta página requer autorização. Podes tentar mudar de diretório.
Para iniciar um serviço ou serviço de driver, o programa de controle de serviço usa a funçãoStartService. A função StartService falhará se o banco de dados estiver bloqueado. Se isso ocorrer, o programa de controle de serviço deve aguardar alguns segundos e chamar StartService novamente. Ele pode verificar o status de bloqueio atual do banco de dados chamando a funçãoQueryServiceLockStatus.
Se o programa de controle de serviço estiver iniciando um serviço, ele poderá usar a função StartService para especificar uma matriz de argumentos a serem passados para a função ServiceMain do serviço. A função StartService retorna depois que um novo thread é criado para executar a função ServiceMain. O programa de controle de serviço pode recuperar o status do serviço recém-iniciado em uma estrutura de SERVICE_STATUS chamando a funçãoQueryServiceStatus. Durante a inicialização, o dwCurrentState membro deve ser SERVICE_START_PENDING. O membro do dwWaitHint é um intervalo de tempo, em milissegundos, que indica quanto tempo o programa de controle de serviço deve esperar antes de chamar QueryServiceStatus novamente. Quando a inicialização estiver concluída, o serviço será alterado dwCurrentState para SERVICE_RUNNING.
O gerenciador de controle de serviço não suporta a passagem de variáveis de ambiente personalizadas para um serviço na inicialização. Além disso, o gerenciador de controle de serviço não deteta e transmite alterações para variáveis de ambiente à medida que o serviço é executado. Em vez de tornar um serviço dependente de uma variável de ambiente, use valores do Registro ou argumentos ServiceMain.
A seguir está uma visão geral simplificada do que acontece quando um serviço típico é iniciado pelo gerenciador de controle de serviço:
- O SCM lê o caminho de serviço do registro e se prepara para iniciar o serviço. Isso inclui adquirir o bloqueio de serviço. Qualquer tentativa de iniciar outro serviço enquanto o bloqueio de serviço é mantido será bloqueada até que o bloqueio de serviço seja liberado.
- O SCM inicia o processo e aguarda até que o processo filho saia (indicando uma falha) ou informe o status SERVICE_RUNNING.
- O aplicativo executa sua inicialização muito simples e chama a funçãoStartServiceCtrlDispatcher.
- StartServiceCtrlDispatcher se conecta ao gerenciador de controle de serviço e inicia um segundo thread que chama a função ServiceMain para o serviço. ServiceMain deve comunicar SERVICE_RUNNING o mais rapidamente possível.
- Quando o gerenciador de controle de serviço é notificado de que o serviço está em execução, ele libera o bloqueio de serviço.
Se o serviço não atualizar seu status dentro de 80 segundos, mais a última dica de espera, o gerenciador de controle de serviço determinará que o serviço parou de responder. O gerenciador de controle de serviço registrará um evento e interromperá o serviço.
Se o programa estiver iniciando um serviço de driver, StartService retornará após o driver de dispositivo ter concluído sua inicialização.
Para obter mais informações, consulte iniciando um serviço.