Hi,
Ich komme nicht so ganz zurecht mit einem Timer in einem Windows Service.
Einige Hinweise habe ich bereits im Netz gefunden, aber bei mir stimmt irgendetwas nicht.
Mein Aktueller Stand:
In der Basis-Konfiguration ohne Timer funktioniert es wie gewünscht. Starten und Stoppen des Dienstes ist kein Problem.
Mit dem Timer allerdings nicht.
Wie zu erkennen ist, soll der Timer im Test erstmal nur dafür sorgen, dass alle 5 Sekunden etwas in das ServiceLogFile geschrieben wird.
Das passiert aber nicht. Auch die catch()-Blöcke scheinen nicht ausgeführt zu werden, zumindest wird nichts in die Datei geschrieben.
Beim Beenden des Dienstes mit Timer bekomme ich zudem auch immer die Meldung:
service-stop-error.jpg
Ich hätte jetzt zumindest vermutet oder gehofft, dass mir die catch()-Blöcke etwas Aussage darüber bringen, aber es passiert leider nichts.
Ich bin mir relativ sicher, dass das mit dem Timer zu tun haben muss, weil ich wie gesagt ohne Timer keine Probleme habe und er dann auch tut, was er soll.
Ich hatte auch den Timer ganz am Anfang aus der Toolbox gezogen ( System.Timers.Timer ) und auch damit schon das gleiche Problem.
bei meiner Suche im Netz habe ich halt die Variante wie oben öfter gesehen, habe aber damit das gleiche Problem.
Sieht jemand von euch, was noch falsch sein oder wo ich schauen könnte?
Danke
Ich komme nicht so ganz zurecht mit einem Timer in einem Windows Service.
Einige Hinweise habe ich bereits im Netz gefunden, aber bei mir stimmt irgendetwas nicht.
Mein Aktueller Stand:
Code:
using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Diagnostics; using System.Linq; using System.ServiceProcess; using System.Text; using System.Timers; namespace WindowsServiceTest { public partial class Service1 : ServiceBase { const string ServiceLogFile = @"C:\Users\me\Documents\ServiceTestLog.txt"; private Timer timer1; public Service1() { InitializeComponent(); } protected override void OnStart(string[] args) { try { System.IO.File.Create(ServiceLogFile); timer1 = new Timer(); timer1.Enabled = true; timer1.Interval = 5000; timer1.AutoReset = true; timer1.Elapsed += new ElapsedEventHandler(timer_Elapsed); timer1.Start(); } catch(Exception e) { System.IO.File.AppendAllText( ServiceLogFile, e.ToString() + "\r\n\r\n" ); } } protected override void OnStop() { try { timer1.Stop(); System.IO.File.Delete(ServiceLogFile); } catch(Exception e) { System.IO.File.AppendAllText(ServiceLogFile, e.ToString() + "\r\n\r\n"); } } private void timer_Elapsed( object sender, ElapsedEventArgs e ) { try { System.IO.File.AppendAllText(ServiceLogFile, DateTime.Now.ToString("dd.MM.yyyy HH:mm:ss") + "\r\n"); } catch(Exception ex) { System.IO.File.AppendAllText(ServiceLogFile, ex.ToString() + "\r\n\r\n"); } } } }
Mit dem Timer allerdings nicht.
Wie zu erkennen ist, soll der Timer im Test erstmal nur dafür sorgen, dass alle 5 Sekunden etwas in das ServiceLogFile geschrieben wird.
Das passiert aber nicht. Auch die catch()-Blöcke scheinen nicht ausgeführt zu werden, zumindest wird nichts in die Datei geschrieben.
Beim Beenden des Dienstes mit Timer bekomme ich zudem auch immer die Meldung:
service-stop-error.jpg
Ich hätte jetzt zumindest vermutet oder gehofft, dass mir die catch()-Blöcke etwas Aussage darüber bringen, aber es passiert leider nichts.
Ich bin mir relativ sicher, dass das mit dem Timer zu tun haben muss, weil ich wie gesagt ohne Timer keine Probleme habe und er dann auch tut, was er soll.
Ich hatte auch den Timer ganz am Anfang aus der Toolbox gezogen ( System.Timers.Timer ) und auch damit schon das gleiche Problem.
bei meiner Suche im Netz habe ich halt die Variante wie oben öfter gesehen, habe aber damit das gleiche Problem.
Sieht jemand von euch, was noch falsch sein oder wo ich schauen könnte?
Danke
Comment