Announcement

Collapse
No announcement yet.

Dienst startet nicht

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Dienst startet nicht

    Hallo,

    ich habe einen Windows-Dienst programmiert, der merkwürdigerweise auf einigen Rechnern läuft, auf anderen aber nicht. Beim manuellen Start erhalte ich dann folgende Meldung:

    "Dienst "Name..." wurde auf "Lokaler Computer" gestartet und dann angehalten. Einige Dienste werden automatisch gestartet und dann angehalten, wenn sie sich im Leerlauf befinden, wie z.B. Leistungsprotkoll-und Alarmierungsdienst."

    Im Dienst selbst wird als erste Aktion eine Meldung in das EventLog geschrieben. Im Fehlerfall erscheint noch nicht einmal diese Meldung, daher kann das Problem meines Erachtens nicht im Inhalt der "OnStart"-Ereignisprozedur liegen.

    Um die Verwirrung zu vervollständigen, sollte ich vielleicht noch hinzufügen, dass bis gestern Nachmittag alles noch in Ordnung war. Das Problem habe ich erst seit einer Änderung, aber eben nicht überall. Und auch die Rücknahme der Änderung hat das Problem nicht beseitigen können.

    Hat irgend jemand eine Ahnung was hier passiert sein könnte, bzw. wie ich der Fehlerursache auf die Spur kommen kann?

    Bin für jeden Hinweis dankbar
    Udo

  • #2
    Hallo,

    normalerweise wird in OnStart ein eigener Thread mit der Nutzfunktion gestartet. Dieser Thread muss innerhalb von 30 Sekunden auf Botschaften des Service Control Manager (SCM) reagieren können. Gibt es bei diesem Dienst an dieser Stelle eine abweichende Implementierung?

    Comment


    • #3
      Dienst startet nicht

      Hallo,
      diese Fehlermeldung erhält man auch, wenn der Konstruktor, der das Dienst-Objekt erstellt, fehlschlägt. Sowas kann z.B. passieren, wenn ein File nicht gefunden wurde, oder wenn versucht wird, auf ein Netzwerklaufwerk zuzugreifen, für das der Service-Account keine Rechte hat.

      Gruß
      Ingo

      Comment


      • #4
        Hallo,

        jetzt bin ich mal auf eine Erklärung für folgendes Verhalten gespannt:

        Als ich aus dem Urlaub zurückkehre und an der Geschichte weitermachen möchte, läuft der Dienst auf einmal wieder, ohne dass ich das System auch nur angerührt hätte! Nun habe ich gedacht, das Problem hat sich bestimmt auf wundersame Weise von alleine erledigt und wollte es schon zu den Akten legen.

        Aber:
        Nach dem ich den Dienst mehrfach (so ca. 10-20 mal) angehalten und wieder gestartet habe (geht nicht anders, ich muss vom Dienst geladene Module tauschen), stehe ich vor haargenau demselben Problem!

        Gibt es irgendwo im Betriebssystem eine Beschränkung für die Anzahl Starts pro Tag oder sonst so eine kleine Nettigkeit? Ich jedenfalls stehe vor einem Rätsel...

        Udo

        Comment


        • #5
          Hallo,

          Gibt es irgendwo im Betriebssystem eine Beschränkung für die Anzahl Starts pro Tag...
          nein - die Ursache muss in der Implementierung des Dienstes liegen. Es können auch Seiteneffekte sein (Bsp: Zertifikatsprüfung einer als Verweis in das Projekt eingebundene Assembly dauert zu lange etc.).

          Comment


          • #6
            Heureka!

            Ich habe aus Verzweiflung den Dienst als normale Anwendung implementiert. Diese produzierte eine Ausnahme mit dem sinngemäßen Text "EventLog ist voll"!

            Wie ich ja erwähnte schreibt der Dienst als erste Aktion eine Meldung in die Ereignisanzeige. Diese war so konfiguriert (ist wohl der Standard), dass sie 512K fasst und Meldungen erst nach 7 Tagen überschreibt. Daher auch der Effekt, dass nach 3 Wochen Urlaub alles wieder lief!

            Ich bin ja heilfroh, dass ich den Fehler endlich gefunden habe, aber wieso werden von Diensten denn keine Ausnahmen angezeigt?

            Udo

            Comment


            • #7
              Hallo !
              Ich bin ein kompletter Neuling in Sachen VB.Net
              Hab auch vorher nicht wirklich etwas mit Programmieren am Hut gehabt.

              Aber ich stehe jetzt vor einem Problem!
              Ich habe einen Dienst selber geschrieben, diesen habe ich auch ohne Probleme installieren können.
              Aber wenn ich ihn starte, dann macht er nichts!

              Hier ein kurzer Ausschnitt:

              Imports System.ServiceProcess
              Imports System.Threading

              Public Class Service1
              Dim MyLog As New EventLog() ' create a new event log

              Protected Overrides Sub OnStart(ByVal args() As String)
              ServiceBase.Run(New Service1)
              Timer1.Enabled = True

              End Sub

              Protected Overrides Sub OnStop()

              Timer1.Enabled = False

              End Sub

              Private Sub Routine()

              Const DATEINAME As String = "e:\protokoll.txt"

              ' --- Datei öffnen
              Dim fs As IO.FileStream = New IO.FileStream(DATEINAME, IO.FileMode.Append, IO.FileAccess.Write, IO.FileShare.Write)

              ' --- Stream öffnen
              Dim w As IO.StreamWriter = New IO.StreamWriter(fs)
              ' --- Anfügen am Ende
              w.BaseStream.Seek(0, IO.SeekOrigin.Current)

              ' --- Zeilen schreiben
              w.WriteLine("Start des Programms: " & Now)
              ' --- Einzelne Zeichen schreiben

              Dim a As Integer
              For a = 1 To 26
              w.Write(Chr(96 + a))
              Next
              w.WriteLine()
              ' --- Zeilen schreiben
              w.WriteLine("Ende des Programms: " & Now)
              ' --- Writer und Stream schließen
              w.Close()
              fs.Close()


              End Sub

              Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick

              Routine()

              End Sub
              End Class



              -------
              Wenn ich diesen Code in eine Form bringe, das heißt ich den "OnStart" und den "OnStop" - Event mit Buttons simuliere, dann funktioniert dies ohne Probleme.
              Wenn bei mir aber der Dienst startet, dann passiert nichts!
              Woran kann das liegen ?

              Danke für Antworten schon im Voraus ! :-)

              Lg CSand
              Lass ich aber

              Comment


              • #8
                Wo kommt "Timer1" denn her? In deinem Formular hast du den bestimmt drin, aber im Dienst fehlt der offensichtlich. Versuchs mal mit

                Timer1 = New System.Threading.Timer(AddressOf Timer1_Tick, Nothing, 1000, 1000)

                Gruß
                Udo

                Comment


                • #9
                  Danke für die schnelle Antwort !

                  Hab den Timer1 vergessen, danke ! :-)
                  Aber der Dienst läuft trotzdem nicht ...

                  Was mich wundert ist, dass der Dienst im Debug-Modus funktioniert.
                  Aber wenn ich ihn "normal" ausführe, dann passiert nichts.

                  Danke mal wieder im Voraus !

                  Comment


                  • #10
                    Dienst ... wurde auf "Lokaler Computer" gestartet und dann angehalte

                    Guten Tag,
                    ich hatte ein ähnliches Problem wie die Benutzer oben. Ich benutzt Delphi, und es handelt sich um einen Win32-Dienst.
                    In meinem Fall war aber die Lösung, dass ich eine leere Routine für die Ereignisbehandlung "ServiceExecute" angegeben hatte. Entferne ich diese Ereignisbehandlung, dann kommt dieser Fehler nicht mehr, und die Behandlung für "ServiceStart" (wo der Arbeits-Thread gestartet wird) wird ausgeführt.
                    LG

                    Comment

                    Working...
                    X