EventType clr20r3

Der Titel dieses Beitrages sollte eigentlich besser lauten:

EventType clr20r3 – oder starte niemals einen Windows Dienst ohne eine globale Fehlerbehandlung.

Ich hatte einen neuen Windows Dienst geschrieben, der wie schon so viele Dienste vorher die Aufgabe zur Systemüberwachung auf eingehende Interfacedateien per FTP durchführen sollte.

Der Dienst bezieht aus einer SQL Datenbank die Informationen für welche Mandanten dieser Dienst zu verrichten ist und überwacht dann die ebenfalls in der SQL angegebenen FTP Verzeichnisse auf eingehende neue Daten. Sind neue Daten vorhanden lädt der Dienst diese Dateien herunter, verarbeitet diese und löscht dann wenn alles erfolgreich war die Daten auf dem FTP Server.

So ungefähr in dieser Art habe ich schon unzählige Dienste erstellt. Auch dieser Dienst, der in der Entwicklungsumgebung einwandfrei funktioniert, macht nach der Installation auf dem W2K3 Server des Kunden Probleme.

Ich starte den Dienst, es dauert ein paar Sekunden und es kommt die Meldung, dass der Dienst nicht gestartet werden konnte.

image

Also schaue ich im Ereignisprotokoll nach und stoße auf eben diese Meldung :

image Ich habe eine ähnliche Fehlermeldung schon öfter gehabt, und die hat eigentlich immer auf falschen Einstellungen in der ´Konfigurationsdatei hingedeutet.

Aber warm muss ich eigentlich im trüben Wasser fischen, wieso gibt mir das System keine ordentliche Fehlermeldung geben. Da kan doch nur Bill Gates (Ich meine Microsoft) dran schuld sein, haben wohl wieder mal vergessen ordentliche Fehlermeldungen einzubauen.
Andere werden doch das gleiche Problem haben, was machen die denn gegen eine solche Abstrakte Fehlermeldung, was fängt man damit an.

Also einfach mal nach EventType clr20r3 gegoogelt (oh man was für ein Wort smile_speedy). Die Suchergebnisse sind weniger als zufriedenstellend. Das einzige was sicher zu sein scheint, der Fehler tritt wohl immer mit Windows Diensten auf, nicht auf allen Maschinen (was sich später als Logisch herausstellt) und er tritt auf Systemen mit dem NET Framework 2 auf.

Das alles ist und war mir einfach zu wenig und da ich bereits einige male über einen Fehler dieser Art gestolpert war, habe ich mir dieses mal die Zeit genommen, dass ganze mal etwas mehr Global zu betrachten und nicht nur den speziellen Fehler in diesem Fall im trüben Wasser zu suchen (und hoffentlich auch zu finden).

Ich möchte auch jetzt nicht den ganzen Weg beschreiben wie ich hier vorgegangen bin und was ich alles getestet habe, da man ja einen Service der im Start nicht funktioniert nicht einfach so Debuggen kann.

Die Essenz meiner Untersuchungen haben folgendes Ergeben:

Diese Blöde Fehlermeldung wird vom NET Framework ausgegeben wenn keine ordentlich Exception innerhalb des beim Start ausgeführten Codes enthalten ist. Dabei kann der Fehler eine Fehlende Datei, die falsche oder fehlende Konfiguration, ein Problem mit einem verwendet Port oder wie es in meinem Fall war, einfach das nicht Vorhandensein einer Tabelle in der DB sein.

Ja ich hatte einfach vergessen, nach der Installation des Dienstes auch das SQL Skript zur Erstellung des Tabellen und Gespeicherten Prozeduren auszuführen.

Und was macht man, damit man nicht mehr diese nichtssagende Fehlermeldung bekommt, sondern etwas mit dem man dann auch etwas anfangen kann:

Lösung:

Man muss in der ersten, was auch immer, die durch die OnStart() Methode aufgerufen wird unbedingt darauf achten dass man dort eine try – catch Anweisung einbaut, die dann eine ordentlich Fehlermeldung erzeugt und am besten auch in das Ereignisprotokoll schreibt.

3 Gedanken zu „EventType clr20r3“

  1. Hallo HP,

    danke für diesen Artikel. Zu diesem Fehler hatte ich bislang nur massenweise Fragen aber keine Antworten gefunden.
    Der Tipp, dass ein Try – Catch Block fehlen könnte, war für mich Gold wert.

    Nochmals danke.
    Sigi

  2. Hallo,
    danke für diesen informativen Artikel. Hab momentan das gleiche Problem. Kann diesen Fehler auch leider nicht nachstellen. Ich hab deinen Ratschlag befolgt und eine Try-Catch Anweisung eingebaut. Leider bekomme ich immer noch diesen Fehler. Was mach ich falsch? Ich poste hier mal den onStart – Teil. Vielleicht kann mir jemand helfen. Danke an alle im Voraus.

    protected override void OnStart(string[] args)
    {
    try
    {
    this.eventLogService.WriteEntry("Service started.");

    Registry reg = new Registry();
    bool statusReg = reg.InitRegistry(this.subkey);

    this.log = new LogFile(reg.logdir,"ServiceErrorFile","ServiceLogfile",reg.verboselevel);
    dump();
    // TODO: Fügen Sie hier Code hinzu, um Ihren Dienst zu starten.
    }
    catch(Exception e)
    {
    MessageBox.Show("An Error has occured in the service:\r\n" + e.Message, "Attention", MessageBoxButtons.OK, MessageBoxIcon.Exclamation,MessageBoxDefaultButton.Button1, MessageBoxOptions.RightAlign );
    }
    }

  3. MessageBox.Show(…) ist keine gute Idee, wenn man bedenkt, dass du hier einen Service schreiben willst…
    Ab mit der Fehlermeldung ins Eventlog oder in eine eigende Log-Datei.

    Messageboxen aus einem Service heraus sollten leider immer Fehlermeldungen bringen…

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.