Tjänstens startpunkt
Tjänster skrivs vanligtvis som konsolprogram. Startpunkten för ett konsolprogram är dess huvudsakliga funktion. Funktionen main tar emot argument från värdet ImagePath från registernyckeln för tjänsten. Mer information finns i avsnittet Anmärkningar i funktionen CreateService.
När SCM startar ett tjänstprogram väntar den på att anropa funktionen StartServiceCtrlDispatcher. Använd följande riktlinjer.
- En tjänst av typen SERVICE_WIN32_OWN_PROCESS ska anropa StartServiceCtrlDispatcher omedelbart från huvudtråden. Du kan utföra alla initieringar när tjänsten startas, enligt beskrivningen i Service ServiceMain Function.
- Om tjänsttypen är SERVICE_WIN32_SHARE_PROCESS och det finns en gemensam initiering för alla tjänster i programmet kan du utföra initieringen i huvudtråden innan du anropar StartServiceCtrlDispatcher, så länge det tar mindre än 30 sekunder. Annars måste du skapa en annan tråd för att göra den vanliga initieringen, medan huvudtråden anropar StartServiceCtrlDispatcher. Du bör fortfarande utföra en tjänstspecifik initiering när tjänsten startas.
Funktionen StartServiceCtrlDispatcher har en SERVICE_TABLE_ENTRY struktur för varje tjänst som ingår i processen. Varje struktur anger tjänstnamnet och startpunkten för tjänsten. Ett exempel finns i Skriva ett tjänstprograms huvudfunktion.
Om StartServiceCtrlDispatcher lyckas returneras inte anropstråden förrän alla tjänster som körs i processen har angett SERVICE_STOPPED tillstånd. SCM skickar kontrollbegäranden till den här tråden via ett namngivet rör. Tråden fungerar som en kontrollutskickare och utför följande uppgifter:
- Skapa en ny tråd för att anropa lämplig startpunkt när en ny tjänst startas.
- Anropa lämplig -hanteringsfunktion för att hantera begäranden om tjänstkontroll.
Relaterade ämnen