Beispiel für den vollständigen Dienst

Die Themen in diesem Abschnitt bilden ein vollständiges Dienstbeispiel:

Erstellen des Dienstes

Im folgenden Verfahren wird beschrieben, wie Sie den Dienst erstellen und die Ereignismeldungs-DLL registrieren.

So erstellen Sie den Dienst und registrieren die Ereignismeldungs-DLL

  1. Erstellen Sie die Meldungs-DLL aus Sample.mc, indem Sie die folgenden Schritte ausführen:

    1. mc-U sample.mc
    2. rc -r sample.rc
    3. link -dll -noentry -out:sample.dll sample.res
  2. Erstellen Sie Svc.exe, SvcConfig.exe und SvcControl.exe aus Svc.cpp, SvcConfig.cpp bzw. SvcControl.cpp.

  3. Erstellen Sie den Registrierungsschlüssel HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\EventLog\Application\SvcName , und fügen Sie diesem Schlüssel die folgenden Registrierungswerte hinzu.

    Wert type BESCHREIBUNG
    EventMessageFile = dll_path REG_SZ Der Pfad zu der ressourcenbezogenen DLL, die Zeichenfolgen enthält, die der Dienst in das Ereignisprotokoll schreiben kann.
    TypesSupported = 0x00000007 REG_DWORD Eine Bitmaske, die die unterstützten Ereignistypen angibt. Der Wert 0x000000007 gibt an, dass alle Typen unterstützt werden.

     

Testen des Diensts

Im folgenden Verfahren wird beschrieben, wie Sie den Dienst testen.

So testen Sie den Dienst

  1. Starten Sie in Systemsteuerung die Anwendung Dienste. (Verwenden Sie in den folgenden Schritten die F5-Taste, um die Anzeige zu aktualisieren, nachdem Sie einen Befehl ausgeführt haben, der die Informationen in der Dienstanwendung ändert.)

  2. Führen Sie den folgenden Befehl aus, um den Dienst zu installieren:

    svc-Installation

    Der Dienst schreibt "Dienst erfolgreich installiert" in die Konsole, wenn der Vorgang erfolgreich ist oder andernfalls eine Fehlermeldung angezeigt wird.

    Wenn die Dienstinstallation erfolgreich ist, wird der Dienst in der Dienstanwendung angezeigt. Beachten Sie, dass Name auf "SvcName", Beschreibung und Status leer und Starttyp auf "Manuell" festgelegt ist.

  3. Führen Sie den folgenden Befehl aus, um den Dienst zu starten:

    svccontrol start SvcName

    Wenn der Vorgang erfolgreich ist, schreibt das Dienststeuerungsprogramm "Dienststart ausstehend..." und dann "Service started successfully" (Dienst erfolgreich gestartet) in der Konsole. Andernfalls schreibt das Programm eine Fehlermeldung in die Konsole.

    Wenn der Dienst erfolgreich gestartet wird, wird Status auf "Gestartet" festgelegt. Der Code in der ServiceMain-Funktion wird vom SCM ausgeführt. Wenn ein Fehler auftritt, schreibt der Dienst eine Fehlermeldung in das Ereignisprotokoll. Diese Meldung enthält den Namen der Funktion, die fehlgeschlagen ist, und den Fehlercode, der bei einem Fehler zurückgegeben wurde.

  4. Führen Sie den folgenden Befehl aus, um die Dienstbeschreibung zu aktualisieren:

    svcconfig beschreiben SvcName

    Das Dienstkonfigurationsprogramm schreibt "Dienstbeschreibung erfolgreich aktualisiert" in die Konsole, wenn der Vorgang erfolgreich ist oder andernfalls eine Fehlermeldung angezeigt wird.

    Wenn das Update erfolgreich ist, wird Description auf "This is a test description" (Dies ist eine Testbeschreibung) festgelegt.

  5. Führen Sie den folgenden Befehl aus, um die Dienstkonfiguration abzufragen:

    Svcconfig-Abfrage SvcName

    Das Dienstkonfigurationsprogramm schreibt die Dienstkonfigurationsinformationen in die Konsole, wenn der Vorgang erfolgreich ist, oder andernfalls eine Fehlermeldung.

  6. Führen Sie den folgenden Befehl aus, um die DACL des Diensts zu ändern:

    svccontrol dacl SvcName

    Das Dienstkonfigurationsprogramm schreibt "Dienst-DACL erfolgreich aktualisiert" in die Konsole, wenn der Vorgang erfolgreich ist oder andernfalls eine Fehlermeldung angezeigt wird.

  7. Führen Sie den folgenden Befehl aus, um den Dienst zu deaktivieren:

    svcconfig disable SvcName

    Das Dienstkonfigurationsprogramm schreibt "Dienst erfolgreich deaktiviert" in die Konsole, wenn der Vorgang erfolgreich ist oder andernfalls eine Fehlermeldung angezeigt wird.

    Wenn der Dienst erfolgreich deaktiviert wurde, wird der Starttyp auf "Deaktiviert" festgelegt.

  8. Führen Sie den folgenden Befehl aus, um den Dienst zu aktivieren:

    svcconfig enable SvcName

    Das Dienstkonfigurationsprogramm schreibt "Dienst erfolgreich aktiviert" in die Konsole, wenn der Vorgang erfolgreich ist oder andernfalls eine Fehlermeldung angezeigt wird.

    Wenn der Dienst erfolgreich aktiviert wurde, wird der Starttyp auf "Manuell" festgelegt.

  9. Führen Sie den folgenden Befehl aus, um den Dienst zu beenden:

    svccontrol stop SvcName

    Wenn der Vorgang erfolgreich ist, schreibt das Dienststeuerungsprogramm "Service stop pending..." und dann "Service stopped successfully" (Dienst erfolgreich beendet) in der Konsole. Andernfalls schreibt das Programm eine Fehlermeldung in die Konsole.

    Wenn der Dienst erfolgreich beendet wird, ist der Status leer.

    Wenn der Dienst nicht beendet werden kann, schreibt das Dienststeuerungsprogramm eine Fehlermeldung in das Ereignisprotokoll, die den Namen der fehlerhaften Funktion und den Fehlercode enthält, der bei einem Fehler zurückgegeben wurde.

  10. Führen Sie den folgenden Befehl aus, um den Dienst zu löschen:

    svcconfig delete SvcName

    Das Dienstkonfigurationsprogramm schreibt "Dienst erfolgreich gelöscht" in die Konsole, wenn der Vorgang erfolgreich ist oder andernfalls eine Fehlermeldung angezeigt wird.

    Wenn der Dienst erfolgreich gelöscht wurde, wird er nicht mehr in der Dienstanwendung angezeigt. (Wenn Sie versuchen, einen Dienst zu löschen, der nicht beendet wird, ist der Vorgang erfolgreich, aber Der Starttyp ist auf "Deaktiviert" festgelegt, und der Diensteintrag wird beim Systemneustart oder beim Beenden des Diensts mithilfe des Task-Managers gelöscht.)

Verwenden von Diensten