Punto di ingresso del servizio

I servizi vengono in genere scritti come applicazioni console. Il punto di ingresso di un'applicazione console è la sua funzione principale . La funzione main riceve gli argomenti dal valore ImagePath dalla chiave del Registro di sistema per il servizio. Per altre informazioni, vedere la sezione Osservazioni della funzione CreateService .

Quando SCM avvia un programma di servizio, attende che chiami la funzione StartServiceCtrlDispatcher . Usare le linee guida seguenti.

  • Un servizio di tipo SERVICE_WIN32_OWN_PROCESS deve chiamare immediatamente StartServiceCtrlDispatcher dal thread principale. È possibile eseguire qualsiasi inizializzazione dopo l'avvio del servizio, come descritto in Funzione ServiceMain.
  • Se il tipo di servizio è SERVICE_WIN32_SHARE_PROCESS ed è presente un'inizializzazione comune per tutti i servizi nel programma, è possibile eseguire l'inizializzazione nel thread principale prima di chiamare StartServiceCtrlDispatcher, purché siano necessari meno di 30 secondi. In caso contrario, è necessario creare un altro thread per eseguire l'inizializzazione comune, mentre il thread principale chiama StartServiceCtrlDispatcher. È comunque necessario eseguire qualsiasi inizializzazione specifica del servizio dopo l'avvio del servizio.

La funzione StartServiceCtrlDispatcher accetta una struttura SERVICE_TABLE_ENTRY per ogni servizio contenuto nel processo. Ogni struttura specifica il nome del servizio e il punto di ingresso per il servizio. Per un esempio, vedere Scrittura della funzione principale di un programma di servizio.

Se StartServiceCtrlDispatcher ha esito positivo, il thread chiamante non restituisce finché tutti i servizi in esecuzione nel processo non hanno immesso lo stato SERVICE_STOPPED. Gestione controllo invia richieste di controllo a questo thread tramite una named pipe. Il thread funge da dispatcher di controllo, eseguendo le attività seguenti:

  • Creare un nuovo thread per chiamare il punto di ingresso appropriato all'avvio di un nuovo servizio.
  • Chiamare la funzione del gestore appropriata per gestire le richieste di controllo del servizio.

Scrittura della funzione principale di un programma di servizi