Gewusst wie: Debuggen von Windows-Dienstanwendungen

Dienste müssen aus dem Kontext des Dienststeuerungs-Managers heraus gestartet werden, nicht aus Visual Studio heraus. Deshalb ist das Debuggen eines Diensts nicht so einfach wie das Debuggen anderer Anwendungstypen von Visual Studio. Damit ein Dienst gedebuggt werden kann, muss er gestartet werden. Danach muss ein Debugger an den Prozess angehängt werden, in dem er ausgeführt wird. Anschließend kann die Anwendung mit allen Standarddebugfunktionen von Visual Studio gedebuggt werden.

Warnung

Das Anhängen darf nur bei bekannten Prozessen durchgeführt werden. Außerdem müssen die Konsequenzen bekannt sein, wenn an den Prozess angehängt wird und dieser u. U. abgebrochen wird. Wenn z. B. an den WinLogon-Prozess angehängt und anschließend das Debuggen beendet wird, hält das System an, weil es ohne WinLogon nicht lauffähig ist.

Ein Debugger kann nur an einen Dienst angehängt werden, der ausgeführt wird. Durch den Vorgang des Anhängens wird die aktuelle Funktion des Diensts unterbrochen. Die Verarbeitung des Diensts wird nicht tatsächlich beendet oder angehalten. Das bedeutet: Wenn mit dem Debuggen eines Diensts begonnen wird, während er ausgeführt wird, befindet er sich während des Debuggens technisch gesehen weiterhin im Status Gestartet. Die Verarbeitung ist jedoch unterbrochen worden.

Durch Anhängen an den Prozess des Diensts ist das Debuggen des größten Codeteils möglich, nicht jedoch für den gesamten Code des Diensts. Da der Dienst bereits gestartet wurde, kann das Debuggen von Code der OnStart-Methode des Diensts nicht auf diese Weise erfolgen. Gleiches trifft auch auf die Main-Methode zu, die zum Laden des Diensts verwendet wird. Dies kann dadurch umgangen werden, dass ein zweiter temporärer Dienst in der Dienstanweisung erstellt wird, der lediglich als Hilfsmittel für das Debuggen verwendet wird. Beide Dienste können installiert werden. Anschließend wird der Dienstprozess geladen, indem der "Dummydienst" gestartet wird. Wenn der Prozess vom temporären Dienst gestartet wurde, kann das Anhängen an den Dienstprozess über das Menü Debuggen in Visual Studio erfolgen.

Nach dem Anhängen an den Prozess können Sie Haltepunkte einrichten und diese zum Debuggen des Codes verwenden. Sobald Sie das zum Anhängen des Prozesses verwendete Dialogfeld verlassen haben, befinden Sie sich im Debugmodus. Dann kann der Dienst mit dem Dienststeuerungs-Manager gestartet, beendet, angehalten und fortgesetzt werden, sodass die festgelegten Haltepunkte angesteuert werden. Nach erfolgreichem Debuggen wird der Dummydienst entfernt.

Tipp

Das Debuggen der OnStart-Methode kann Schwierigkeiten bereiten, da vom Dienst-Manager von Windows ein Limit von 30 Sekunden für alle Versuche erzwungen wird, einen Dienst zu starten. Weitere Informationen finden Sie unter Problembehandlung: Debuggen von Windows-Diensten.

So debuggen Sie einen Dienst

  1. Installieren Sie den Dienst. Weitere Informationen finden Sie unter Gewusst wie: Installieren und Deinstallieren von Diensten.

  2. Starten Sie den Dienst entweder mit dem Dienststeuerungs-Manager, mit dem Server-Explorer oder programmgesteuert. Weitere Informationen finden Sie unter Gewusst wie: Starten von Diensten.

  3. Klicken Sie in Visual Studio im Menü Debuggen auf Prozesse.

    Das Dialogfeld Prozesse wird angezeigt.

  4. Klicken Sie auf Systemprozesse anzeigen.

  5. Klicken Sie im Abschnitt Verfügbare Prozesse auf den Prozess für den Dienst und anschließend auf Anfügen.

    Tipp

    Der Prozess weist den gleichen Namen wie die ausführbare Datei für den Dienst auf.

    Das Dialogfeld An den Prozess anhängen wird angezeigt.

  6. Wählen Sie alle entsprechenden Optionen aus, und klicken Sie dann auf OK, um das Dialogfeld zu schließen.

    Tipp

    Sie befinden sich jetzt im Debugmodus.

  7. Legen Sie die Haltepunkte fest, die im Code verwendet werden sollen.

  8. Öffnen Sie den Dienststeuerungs-Manager, und bearbeiten Sie den Dienst, indem Sie Befehle zum Beenden, Anhalten und Fortsetzen ausgeben, um die festgelegten Haltepunkte anzusteuern. Weitere Informationen zum Ausführen des Dienststeuerungs-Managers finden Sie unter Gewusst wie: Starten von Diensten.

Siehe auch

Aufgaben

Gewusst wie: Installieren und Deinstallieren von Diensten

Gewusst wie: Starten von Diensten

Konzepte

Einführung in Windows-Dienstanwendungen