Hallo, dies mein erste Anfrage in diesem Forum.
Ich habe einen einfachen Windowsdienst erstellt, wechler über ein separates Programm verwaltet werden kann. Wir der Dienst nun über das Verwaltungsprogramm beendet, kann dieser danach nicht sofort neu gestartet werden. Bei jedem Versuch wird der Dienst sofort wieder beendet. Erst nach ca. 30 Sekunden ist dann ein Neustart möglich. Das gleiche Problem habe ich, wenn ich den Dienst über die Diensteverwaltung von Windows beende und dann wieder neu startet möchte.
Wie ich nun in bereits mehreren Beiträgen gelesen habe, soll in der Sub "OnStart" nicht direkt Programmcode verwendet werden, da für die Ausführung der hier hinterlegten Anweisungen ein Zeitlimit vorgegeben ist. Daher führe beim Windowsstart alle weiteren Aktionen in einem eingenen Thread aus. Dieser startet wiederum zwei weitere Threads mit unterschiedlichen Aufgaben. Beim Beenden - "OnStop" gehe ich nun wie folgt vor:
Es wäre prima, wenn jemend eine Idee hätte, was ich ändern müsste, damit der Dienst sofort wieder gestartet werden kann. Vielen Dank.
Ich habe einen einfachen Windowsdienst erstellt, wechler über ein separates Programm verwaltet werden kann. Wir der Dienst nun über das Verwaltungsprogramm beendet, kann dieser danach nicht sofort neu gestartet werden. Bei jedem Versuch wird der Dienst sofort wieder beendet. Erst nach ca. 30 Sekunden ist dann ein Neustart möglich. Das gleiche Problem habe ich, wenn ich den Dienst über die Diensteverwaltung von Windows beende und dann wieder neu startet möchte.
Wie ich nun in bereits mehreren Beiträgen gelesen habe, soll in der Sub "OnStart" nicht direkt Programmcode verwendet werden, da für die Ausführung der hier hinterlegten Anweisungen ein Zeitlimit vorgegeben ist. Daher führe beim Windowsstart alle weiteren Aktionen in einem eingenen Thread aus. Dieser startet wiederum zwei weitere Threads mit unterschiedlichen Aufgaben. Beim Beenden - "OnStop" gehe ich nun wie folgt vor:
VB.NET-Quellcode
- MyServiceThread.Join(TimeSpan.FromSeconds(20))
- If (MyServiceThread.ThreadState And ThreadState.Running) = ThreadState.Running Then
- MyServerThread.Join(TimeSpan.FromSeconds(5))
- If (MyServerThread.ThreadState And ThreadState.Running) = ThreadState.Running Then
- MyServerThread.Abort()
- End If
- MyQueueThread.Join(TimeSpan.FromSeconds(5))
- If (MyQueueThread.ThreadState And ThreadState.Running) = ThreadState.Running Then
- MyQueueThread.Abort()
- End If
- MyServiceThread.Abort()
- End If
Es wäre prima, wenn jemend eine Idee hätte, was ich ändern müsste, damit der Dienst sofort wieder gestartet werden kann. Vielen Dank.