Frage

Ich bin eine Reihe von Windows-Diensten zu schreiben. Ich mag, dass sie zum Scheitern verurteilt, wenn Fehler bei der Inbetriebnahme (in OnStart() Methode) geworfen werden. Ich hatte angenommen, dass nur einen Fehler in OnStart() wirft dies tun würde, aber ich finde, dass statt es „Startet“ und stellt mich mit einer Meldung „Der Dienst wird gestartet, aber inaktiv ist. Ist das richtig?“ (Paraphrase). Wie gehe ich den Fehler, so dass es tatsächlich den Dienst starten fehlschlägt?

War es hilfreich?

Lösung

Wenn Sie .NET 2.0 oder höher ausgeführt wird, können Sie http: / /www.devnewsgroups.net/group/microsoft.public.dotnet.framework/topic50404.aspx )

(News-Gruppe gegangen)

Andere Tipps

Wenn die Hauptsache Sie möchten, für das Dienste-Fenster ist zu berichten, dass es ein Fehler war, von dem, was ich versucht habe (.net 3.5 auf Windows 7), der einzige Weg, dies zu tun ist durch den Exitcode einstellen. Ich empfehle es 13816 Einstellung, da diese in der Nachricht führt, „Ein unbekannter Fehler ist aufgetreten.“ Siehe die Fenster Fehlercodes .

Das folgende Beispiel erfüllt drei Dinge. 1 - Einstellung Exitcode ergibt sich eine nützliche Nachricht für den Endbenutzer. Es ist nicht das Windows-Anwendungsprotokoll beeinflussen, aber eine Nachricht im Systemprotokoll enthält. 2 - Aufruf Stop-Ergebnisse in einem „Service erfolgreich beendet“ Meldung im Anwendungsprotokoll. 3 - wirft die Ausnahme ergibt einen nützlichen Protokolleintrag in dem Anwendungsprotokoll

.
protected override void OnStart(string[] args) {

  try {
    // Start your service
  }
  catch (Exception ex) {
    // Log exception
    this.ExitCode = 13816;
    this.Stop();
    throw;
  }

}

Verschieben Sie alle Ihre Start-Logik zu einem separaten Verfahren, und werfen Ausnahmen (oder rufen Sie OnStop) von diesem getrennten Verfahren.

OnStart hat einige Merkwürdigkeiten beim Anfahren. Ich habe festgestellt, dass, wenn OnStart () in ihm nicht mehr als eine Linie hat, dann nicht ich die „Der Dienst gestartet und dann automatisch stopped.Some Dienste beenden, wenn sie keine Arbeit zu tun haben“ -Meldung, und geworfen Ausnahmen enden die Prozess und melden Sie sich an das App-Ereignisprotokoll.

Auch mit der separaten Startmethode können Sie eine Technik wie diese verwenden es zu debuggen, ohne Befestigung. http://www.codeproject.com/KB/dotnet/DebugWinServices.aspx

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top