Freigeben über


Diensteinstiegspunkt

Dienste werden in der Regel als Konsolenanwendungen geschrieben. Der Einstiegspunkt einer Konsolenanwendung ist die Hauptfunktion. Die Hauptfunktion empfängt Argumente aus dem wert ImagePath aus dem Registrierungsschlüssel für den Dienst. Weitere Informationen finden Sie im Abschnitt "Hinweise" der Funktion CreateService.

Wenn das SCM ein Dienstprogramm startet, wartet es darauf, dass es die StartServiceCtrlDispatcher--Funktion aufruft. Verwenden Sie die folgenden Richtlinien.

  • Ein Dienst vom Typ SERVICE_WIN32_OWN_PROCESS sollte StartServiceCtrlDispatcher sofort aus dem Hauptthread aufrufen. Sie können jede Initialisierung durchführen, nachdem der Dienst gestartet wurde, wie in ServiceMain Functionbeschrieben.
  • Wenn der Diensttyp SERVICE_WIN32_SHARE_PROCESS ist und es eine allgemeine Initialisierung für alle Dienste im Programm gibt, können Sie die Initialisierung im Hauptthread ausführen, bevor Sie StartServiceCtrlDispatcheraufrufen, solange es weniger als 30 Sekunden dauert. Andernfalls müssen Sie einen anderen Thread erstellen, um die allgemeine Initialisierung zu erledigen, während der Hauptthread StartServiceCtrlDispatcheraufruft. Sie sollten nach dem Start des Diensts weiterhin dienstspezifische Initialisierungen durchführen.

Die StartServiceCtrlDispatcher--Funktion übernimmt eine SERVICE_TABLE_ENTRY Struktur für jeden Dienst, der im Prozess enthalten ist. Jede Struktur gibt den Dienstnamen und den Einstiegspunkt für den Dienst an. Ein Beispiel finden Sie unter Schreiben der Hauptfunktion eines Dienstprogramms.

Wenn StartServiceCtrlDispatcher erfolgreich ist, wird der aufrufende Thread erst zurückgegeben, wenn alle ausgeführten Dienste im Prozess den SERVICE_STOPPED Zustand eingegeben haben. Der SCM sendet Steuerelementanforderungen an diesen Thread über eine benannte Pipe. Der Thread fungiert als Steuerelement-Verteiler und führt die folgenden Aufgaben aus:

  • Erstellen Sie einen neuen Thread, um den entsprechenden Einstiegspunkt aufzurufen, wenn ein neuer Dienst gestartet wird.
  • Rufen Sie die entsprechende -Handlerfunktion auf, um Dienststeuerungsanforderungen zu verarbeiten.

Schreiben der Hauptfunktion eines Dienstprogramms