Laden...

[erledigt] Windows-Service: Service antwortet nicht rechtzeitig...

Erstellt von Kingkook vor 11 Jahren Letzter Beitrag vor 11 Jahren 7.619 Views
K
Kingkook Themenstarter:in
69 Beiträge seit 2011
vor 11 Jahren
[erledigt] Windows-Service: Service antwortet nicht rechtzeitig...

Liebe Com,

ich verzweifel gerade an meinem WindowsService.Folgender Hintergrund:

Ich ahbe ein Dienst, welcher wenn er gestartet ist in gewissen Zeitabständen Mails verschicken soll. Was er dabei verschicken soll und an wen kann auf einer GUI festgelegt werden ( von da kann man auch den Dienst de/installieren und startet).
Wenn ich aber jetzt versuche den Dienst zu starten, kommt immer die Fehlermeldung:> Fehlermeldung:

Der Dienst MailGeneratorServiceDebug kann nicht auf dem Computer . gestartet werden.

Hier ein paar Snippets:
Starten des Dienstes


        private void StartServiceClick(object sender, RoutedEventArgs e)
        {
            try
            {
                ServiceController serviceChecker = new ServiceController("MailGeneratorService");
#if DEBUG
                serviceChecker = new ServiceController("MailGeneratorServiceDebug");
#endif
                if(serviceChecker.Status != ServiceControllerStatus.Running)
                {
                    serviceChecker.Start();
                    serviceChecker.WaitForStatus(ServiceControllerStatus.Running, TimeSpan.FromMilliseconds(200));
                }
            }
            catch(Exception ex)
            {
                Logger.ErrorWrite(ex);
            }
        }

MailGeneratorService - Klasse :


        protected override void OnStart(string[] args)
        {
            try
            {
                serviceThreadStart = new ThreadStart(StartService);
                serviceThread = new Thread(serviceThreadStart);
                serviceThread.Start();
            }
            catch(Exception ex)
            {
                Logger.ErrorWrite(ex);
            }
        }

        private static void StartService()
        {
            Logger.InfoWrite("Service started");
            RssTimedJob.Start();
            RssSendJob.SendJob.Start();
        }

Habt ihr eine Idee, woran es liegen kann, oder wie ich mehr Informationen bekommen kann als die nichtssagende Exception?

Gruß Kooki

6.911 Beiträge seit 2009
vor 11 Jahren

Hallo Kingkook,

schau mal in die Windows-Ereignisanzeige, dort solle eine besser Info über das Scheitern zu finden sein.

mfG Gü

Stellt fachliche Fragen bitte im Forum, damit von den Antworten alle profitieren. Daher beantworte ich solche Fragen nicht per PM.

"Alle sagten, das geht nicht! Dann kam einer, der wusste das nicht - und hat's gemacht!"

K
Kingkook Themenstarter:in
69 Beiträge seit 2011
vor 11 Jahren

Hi gfoidl,

leider nicht, habe ich auch schon versucht, dort steht aber leider auch nur :

Fehlermeldung:
Das Zeitlimit (30000 ms) wurde beim Verbindungsversuch mit dem Dienst MailGeneratorServiceDebug erreicht.

und

Fehlermeldung:
Der Dienst "MailGeneratorServiceDebug" wurde aufgrund folgenden Fehlers nicht gestartet:
Der Dienst antwortete nicht rechtzeitig auf die Start- oder Steuerungsanforderung.

U
1.688 Beiträge seit 2007
vor 11 Jahren

Hallo,

was steht denn in Deinen Logs? Evtl. solltest Du das Logging ausweiten.

K
Kingkook Themenstarter:in
69 Beiträge seit 2011
vor 11 Jahren

Wie gesagt, mehr Informationen habe ich nicht, obwohl ich AutoLog aktiv habe und davon ausgehe, dass er eigentlich mehr loggen sollte...

Edit:

kann dir nur noch meinen Fehlerlog bieten, der ist aber auch nichtssagend (meiner Meinung nach)

Fehlermeldung:
Message :
Der Dienst MailGeneratorServiceDebug kann nicht auf dem Computer . gestartet werden.
StackTrace :
bei System.ServiceProcess.ServiceController.Start(String[] args)
bei System.ServiceProcess.ServiceController.Start()
bei MailGenerator.MainWindow.StartServiceClick(Object sender, RoutedEventArgs e) in c:\Users\ich\Documents\Visual Studio 2012\Projects\MailGeneratorProject\MailGenerator\GUI\MainWindow.xaml.cs:Zeile 96.
Source :
System.ServiceProcess

6.911 Beiträge seit 2009
vor 11 Jahren

Hallo Kingkook,

wenn du diese Start-Methode aus einer Konsolenanwendung (und nicht im Dienst) ausführst läuft es dann fehlerfrei durch?

Hängt der Dienst von anderen Diensten ab, die nicht gestartet sind und nicht von selbst gestartet werden?

mfG Gü

Stellt fachliche Fragen bitte im Forum, damit von den Antworten alle profitieren. Daher beantworte ich solche Fragen nicht per PM.

"Alle sagten, das geht nicht! Dann kam einer, der wusste das nicht - und hat's gemacht!"

K
Kingkook Themenstarter:in
69 Beiträge seit 2011
vor 11 Jahren

Also es fliegen zwar einige Exceptions aber die werden alle abgefangen, also das Programm läuft normal durch.

16.841 Beiträge seit 2008
vor 11 Jahren

Na, die Exceptions werden schon ihren Grund haben.
Einfach so unterdrücken macht keinen sinn - die muss man in der Regel behandeln....

Wie wärs wenn Du einfach sagst, was es für Exceptions sind?
Wir haben leider noch keine Glaskugel.

K
Kingkook Themenstarter:in
69 Beiträge seit 2011
vor 11 Jahren

Die Exceptions sind "gewollt" und fliegen durch fehlerhafte Konfiguration beim versenden von SmtpMails (zB fehlender Empfänger, falscher SmtpHost/Port).

Aber die Exceptions haben ja nichts damit zu tun, ob der Dienst starten sollte oder nicht.Oder sehe ich das falsch?

Gruß Kooki

U
1.688 Beiträge seit 2007
vor 11 Jahren

Hallo,

ich meinte, ob bspw. "Service started" in Deinen Logs auftaucht. Du kannst Dein Logging zur Ablaufverfolgung erweitern, um herauszubekommen, was der Dienst tut und was nicht.

K
Kingkook Themenstarter:in
69 Beiträge seit 2011
vor 11 Jahren

Wie in den CodeSnippets oben zu sehen ist, logge ich wenn der Service gestartet wird bzw bei einer Exception


        protected override void OnStart(string[] args)
        {
            try
            {
                serviceThreadStart = new ThreadStart(StartService);
                serviceThread = new Thread(serviceThreadStart);
                serviceThread.Start();
            }
            catch(Exception ex)
            {
                Logger.ErrorWrite(ex);
            }
        }

        private static void StartService()
        {
            Logger.InfoWrite("Service started");
            RssTimedJob.Start();
            RssSendJob.SendJob.Start();
        }

Aber soweit kommt er scheinbar garnicht, da weder der catch-Block, noch irgendwas anderes erreicht wird...

16.841 Beiträge seit 2008
vor 11 Jahren

Naja das mit dem Logger heißt nicht unbedingt was.
Wenn Du zB in eine Datei schreiben willst und der Service darauf überhaupt gar keinen Zugriff hat oder haben kann, dann siehst Du von dem Log auch nichts.

Wird bei Dir wahrscheinlich NLog oder log4net sein und die unterdrücken Fehlermeldung, wenn kein Schreiben möglich ist.

K
Kingkook Themenstarter:in
69 Beiträge seit 2011
vor 11 Jahren

Nein, ist ein eigener Logger, habe aber auch Console.WriteLine() probiert, auch da schreibt er mir nicht.Habe das Gefühl die OnStart wird bei mir nie betreten...

16.841 Beiträge seit 2008
vor 11 Jahren

Console bei einem Service....? 🤔

K
Kingkook Themenstarter:in
69 Beiträge seit 2011
vor 11 Jahren

Hastrecht xD Console war blöde Idee, aber auch der EventLog und Trace sagen kein Wort zu mir...

6.911 Beiträge seit 2009
vor 11 Jahren

Hallo Kingkook,

unter welchen Account läuft der Service? Hat der für alles was er machen soll die nötigen Rechte?

Wir können hier nur raten. Versuche mal eine Vorgehensweise nach [Tutorial] Vertrackte Fehler durch Vergleich von echtem Projekt mit minimalem Testprojekt finden, sonst kommen wir bei diesem Ratespiel zu keinem Ende.

mfG Gü

Stellt fachliche Fragen bitte im Forum, damit von den Antworten alle profitieren. Daher beantworte ich solche Fragen nicht per PM.

"Alle sagten, das geht nicht! Dann kam einer, der wusste das nicht - und hat's gemacht!"

U
1.688 Beiträge seit 2007
vor 11 Jahren

Zurück zum Anfang: Ist denn der Service korrekt installiert? Du verwendest "MailGeneratorService" und "MailGeneratorServiceDebug". Ist das richtig? Sind die Pfade in der Registry richtig?

K
Kingkook Themenstarter:in
69 Beiträge seit 2011
vor 11 Jahren

@ gfoidl:

Mit minimalen Testprojekt habe ich folgende Ergebnisse :

Wenn ich nur den Service und einen Installer hinzufüge, ohne etwas zu verändern, fragt er mich bei der Dienstinstallation nach Name/PW.Wenn ich dort meinen angemeldeten Domänenbenutzer (in der Gruppe lokale Admins vorhanden) eintrage und das pw eingebe, installiert er den Service, startet aber nicht mit der gleichen Fehlermeldung wie immer.

Wenn ich in der ProjectInstaller.Designer.cs folgende Zeile hinzufüge/editiere kommen teilweise andere Ergebnisse :
this.serviceProcessInstaller1.Account = System.ServiceProcess.ServiceAccount.LocalService; --> Zugriff verweigert

this.serviceProcessInstaller1.Account = System.ServiceProcess.ServiceAccount.LocalService; --> Der Dienst antwortete nicht rechtzeitig auf die Start- oder Steuerungsanforderung

this.serviceProcessInstaller1.Account = System.ServiceProcess.ServiceAccount.User; --> Verhalten wie bei Default ( fragt nach Username/PW)

Auch wenn ich statt meines Domänenusers den lokalen Admin wähle ("RECHNERNAME\Administrator") und dessen PW eingebe, bekomme ich die Fehlermeldung

Der Dienst antwortete nicht rechtzeitig auf die Start- oder Steuerungsanforderung.

@ujr:

Ja, die beiden Dienstnamen sind zu testzwecken, jenachdem ob ich als Debug oder Release ausführe, damit hängt es nicht zusammen...
Und wieder ja, die Werte unter [HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services]
sind alle richtig (für beide Services)

EDIT 2:
Ein noch minimaleres Testprojekt hat ergeben, wenn ich ein Projekt NUR mit Service+Installer erstelle, funktioniert es ohne Probleme, denke jetzt also dass das Problem daran liegt, dass die WPF-Form in der gleichen Klasse liegt, wie der Service.

U
1.688 Beiträge seit 2007
vor 11 Jahren

Du könntest noch mit "ProcessMonitor" nachschauen, ob Dein Dienst gefunden und gestartet wird.

K
Kingkook Themenstarter:in
69 Beiträge seit 2011
vor 11 Jahren

Nach Projektumstellung scheint es zu funktionieren...danke für eure Hilfe 😃

Könnte geschlossen werden 😃