Ich schreibe eine Reihe von Windows-Diensten. Ich möchte, dass sie fehlschlagen, wenn während des Startvorgangs Fehler auftreten (in OnStart()
Methode). Ich hatte angenommen, dass nur ein Fehler in OnStart()
würde dies tun, aber ich finde, dass stattdessen "Startet" und präsentiert mir mit einer Nachricht, die besagt "Der Dienst hat begonnen, ist aber inaktiv. Ist das korrekt?" (Paraphrase). Wie gehe ich mit dem Fehler um, sodass der Dienst nicht gestartet werden kann?Handle-Ausnahme beim Dienststart
Antwort
Wenn Sie .NET 2.0 oder höher ausführen, können Sie ServiceBase.Stop verwenden, um den Dienst von OnStart zu stoppen. Andernfalls rufe Stop von einem neuen Thread auf.
ref [devnewsgroups] (
http://www.devnewsgroups.net/group/microsoft.public.dotnet.framework/topic50404.aspx)
(News-Gruppe gegangen)
Verschieben Sie Ihre gesamte Startlogik auf eine separate Methode und werfen Sie Exceptions (oder rufen Sie OnStop) von dieser separaten Methode ab.
OnStart hat einige Besonderheiten beim Starten. Ich habe gefunden, dass, wenn OnStart() nicht mehr als eine Zeile darin hat, dann bekomme ich nicht die "Der Dienst gestartet und dann gestoppt.Einige Dienste stoppen automatisch, wenn sie keine Arbeit zu tun haben" Nachricht, und geworfene Ausnahmen werden die beendet Verarbeiten und protokollieren Sie das App-Ereignisprotokoll.
Auch mit der separaten Startmethode können Sie eine Technik wie diese verwenden, um es zu debuggen, ohne anzuhängen. http://www.codeproject.com/KB/dotnet/DebugWinServices.aspx
Wenn die Hauptsache Sie möchten, für das Dienste-Fenster ist zu berichten, dass es ein Fehler war, von dem, was ich habe versucht (.net 3.5 unter Windows 7), der einzige Weg, dies zu tun ist, indem Sie den ExitCode. Ich empfehle, es auf 13816 zu setzen, da dies die Meldung "Ein unbekannter Fehler ist aufgetreten" zur Folge hat. Siehe the windows error codes.
Das folgende Beispiel erfüllt drei Dinge. 1 - Einstellung ExitCode führt zu einer nützlichen Nachricht für den Endbenutzer. Es hat keine Auswirkungen auf das Windows-Anwendungsprotokoll, enthält jedoch eine Nachricht im Systemprotokoll. 2 - Calling Stop führt zu einer Meldung "Service erfolgreich gestoppt" im Anwendungsprotokoll. 3 - Das Auslösen der Ausnahme führt zu einem nützlichen Protokolleintrag im Anwendungsprotokoll.
protected override void OnStart(string[] args) {
try {
// Start your service
}
catch (Exception ex) {
// Log exception
this.ExitCode = 13816;
this.Stop();
throw;
}
}
13816 ist als IPSEC-Fehler gekennzeichnet, so dass es nicht genau zutrifft, aber jeder Nicht-Null-Int wird vom Service Control Manager als Fehler angesehen. Ich glaube, dass die Bedeutung des Codes dem Dienst selbst entspricht. – xr280xr
Das ist ein sehr guter Punkt. Vielleicht wäre Code 1064 besser. (ERROR_EXCEPTION_IN_SERVICE - Bei der Verarbeitung der Steuerungsanforderung ist eine Ausnahme im Dienst aufgetreten.) Die Hauptidee für mich ist die Anzeige einer Nachricht an den Benutzer, die etwas hilfreich und insbesondere nicht irreführend ist. – Sean
Die wichtigsten Teile sind die Einstellung der ExitCode und der Wurf. Es gibt keine Notwendigkeit für die 'Stop();' - der Ausnahmebehandler in ServiceBase tut dies. –
- 1. Wie wird die Protokolldatei beim Dienststart angezeigt?
- 2. Wie kann ein OSGi-Dienst beim Dienststart ordnungsgemäß deaktiviert werden?
- 3. android.os.NetworkOnMainThreadException auf Dienststart auf Android
- 4. Fehler beim Postback beim Hochladen einer Datei
- 5. VBA-Ausführungscode beim Start und beim Interval
- 6. Skript fertig, Datei ist Typoskript in bash beim Erstellen eines Dienstes
- 7. log4j2 Schreiben in Datei beim Testen, nicht beim Deployment
- 8. Probleme beim Rendern beim Rendern: com/android/util/PropertiesMap
- 9. BackboneJS, Probleme beim Erfolg und Fehler beim Speichern eines Modells
- 10. Fehler beim Erstellen von 'mongoMappingContext' Bean beim Komponententest mit Fongo
- 11. Fehler beim Abrufen von Berechtigungen beim Abfragen in Rotverschiebung
- 12. Probleme beim Rendern Beim Rendern ist eine Ausnahme aufgetreten: com.android.ide.common.rendering.api.LayoutlibCallback
- 13. Problem beim Positionswert beim Ziehen und Ablegen in RecyclerView android
- 14. EF CodeFirst beim Behandeln von Datenbankausnahmen beim Speichern von Änderungen
- 15. Fehler beim Segmentieren beim Hinzufügen eines Scheitelpunkts zur benutzerdefinierten Diagrammdatenstruktur?
- 16. "Fehler beim Hochladen von * .app on Device" Fehler beim iPhone
- 17. Beim Hinzufügen von Hintergrundbild: Fehler beim Aufblasen der Klasse android.widget.ImageButton
- 18. Fehler beim Typ "Owner für DynamicMethod" beim Sortieren einer Schnittstelle
- 19. HTML codieren Benutzereingabe beim Speichern oder beim Anzeigen
- 20. Fehler beim Laden der Ansichtsstatus beim dynamischen Laden verschiedener Steuerelemente
- 21. Pyinstaller: Fehler beim Erstellen des Prozesses beim Packen einer Datei
- 22. "Fehler beim Validieren des Serverzertifikats" beim SVN-Checkout mit SvnAnt
- 23. Fehler beim Installieren von charlock_holmes: Fehler beim Installieren von GITLAB
- 24. Fehler beim Sammeln von setup.py beim Versuch, py.test auszuführen?
- 25. Erkennung App ist beim Laden/beim letzten Ausführen abgestürzt?
- 26. Fehler beim Laden von pyodbc-Modul beim Ausführen auf Apache
- 27. Fehler beim Auflösen von "onAction" beim Laden von FXML
- 28. Leerraum beim Ausblenden der unteren Leiste beim Drücken
- 29. Fehler beim Laden von ApplicationContext beim Ausführen von Testfällen
- 30. Problem beim TableMapping-Parameter beim Erstellen der AWS-DMS-Migrationsaufgabe
die Referenzdomäne – hultqvist
Internet Archive zur Rettung gegangen: https://web.archive.org/web/20070730021813/http://www.devnewsgroups.net/group/microsoft.public.dotnet. framework/topic50404.aspx –