Windows Dienst beendet sich nach dem Starten wieder

  • VB.NET

Es gibt 7 Antworten in diesem Thema. Der letzte Beitrag () ist von singu.

    Windows Dienst beendet sich nach dem Starten wieder

    Ich programmier gerade einen Windows Dienst, der verschiedene Sachen im Hintergrund erledigt, wie z.B. Backups anlegen. Nun starte ich die eigentliche Klasse über einen Thread in der Methode OnStart. In dieser wird auch ne Log-Datei erstellt. Die Log-Datei wird nicht erstellt und der Dienst stoppt auch kurz nachdem starten. An was kann das liegen?
    Wir haben zu einem Dienst parallel eine Fenster-Anwendung entwickelt und dort getestet. Praktisch alle Fehler ließen sich dort fixen.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    Das liegt wahrscheinlich daran, dass der Initialisierungsthread des SCM die Ausführung nach 30Sek. an den SCM zurückgibt und dein in OnStart() gestarteter Thread seine Arbeit bereits beendet hat. Du musst sozusagen "unsauber" (Aus der Windows Forms-Sicht) programmieren und einen Thread im Hintergrund laufen lassen, obwohl der ursprüngliche Mainthread längst beendet ist.
    Gruß
    hal2000
    Glaube ich nicht.
    Wir haben hier mehrere Threads mit Timer bzw. TCP und das läuft auch "gemischt".
    Schreib doch einen separaten Log-File, in den Du nur die aktuelle Programm-Position reinbläst.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!

    hal2000 schrieb:

    Das liegt wahrscheinlich daran, dass der Initialisierungsthread des SCM die Ausführung nach 30Sek. an den SCM zurückgibt und dein in OnStart() gestarteter Thread seine Arbeit bereits beendet hat. Du musst sozusagen "unsauber" (Aus der Windows Forms-Sicht) programmieren und einen Thread im Hintergrund laufen lassen, obwohl der ursprüngliche Mainthread längst beendet ist.

    Wie würdest du das machen. Ich hab schon probiert, die Methode in der eigentlichen Klasse direkt anzusprechen, aber da beendet sich der Dienst auch.

    RodFromGermany schrieb:

    Glaube ich nicht.
    Wir haben hier mehrere Threads mit Timer bzw. TCP und das läuft auch "gemischt".
    Schreib doch einen separaten Log-File, in den Du nur die aktuelle Programm-Position reinbläst.

    Hab ich ja eigentlich eingebaut, aber die wird erst gar nicht erstellt.
    Wir haben eine Shared Class, in der ein Shared Pointer auf die eigentliche Arbeits-Klasse liegt.
    Beim Start des Dienstes rufen wir eine Shared-Init auf, die bei (Is Nothing) die Klasse anlegt, und in deren Konstruktor werden Thread und Timer gestartet.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!