ich habe ein Problem mit dem Beenden von einem Dienst. Ich habe eine xb2net-Anwendung, die als Dienst über ServiceApp installiert wurde. Installieren und starten klappt soweit. Wenn ich aber versuche, den Dienst zu beenden, bekomme ich immer die Fehlermeldung "Der Dienst konnte nicht beenden werden, Fehler 109: Pipe wurde beendet".
Ich habe mir mal ein Log eingebaut, die Anwendung wird korrekt beendet, läuft bis zum Quit durch. Nur der Servicecontroller macht ein Problem.
Ist übrigens meine erste Anwendung, die als Dienst laufen soll. Ich habe den Eindruck, als ob mir noch irgend etwas fehlt und deswegen der Dienst nicht sauber beendet wird.
Das Ganze findet auf einem Windows 2008 R2 Server statt, den gleichen Effekt habe ich auch unter Windows 7.
Hier mein Quellcode:
Code: Alles auswählen
oService := MyService()
oService:main := {||StartService()}
oService:stop := {||Terminate()}
oService:start()
CLASS MyService From ServiceApp
EXPORTED:
CLASS METHOD main
CLASS METHOD stop
HIDDEN:
CLASS VAR lRunning
ENDCLASS
CLASS METHOD MyService:main()
::lRunning := .T.
DO WHILE ::lRunning
AppEvent(@mp1,@mp2)
ENDDO
RETURN self
CLASS METHOD MyService:stop()
::lRunning := .F.
RETURN self
PROC Terminate( nPause )
IF nPause == NIL
nPause := 500
ENDIF
StartLog("Terminating HTTP server..." + CRLF + ;
"Date: " + DTOC(DATE()) + CRLF + ;
"Time: " + TIME())
if soServer != NIL
soServer:Stop()
StartLog("HTTP server stopped" + CRLF + ;
"Date: " + DTOC(DATE()) + CRLF + ;
"Time: " + TIME())
soServer:onError := NIL
soServer:Destroy()
endif
if soSServer != NIL
soSServer:Stop()
StartLog("HTTPS server stopped" + CRLF + ;
"Date: " + DTOC(DATE()) + CRLF + ;
"Time: " + TIME())
soSServer:onError := NIL
soSServer:Destroy()
endif
// save all sessions
// sessions can later be restored by using the /RESTORE command line parameter
xbSession():SaveSessions()
StartLog("HTTP server sessions saved" + CRLF + ;
"Date: " + DTOC(DATE()) + CRLF + ;
"Time: " + TIME())
// close the log file
if soTLog != NIL
soTLog:Close()
endif
Sleep(nPause)
StartLog("HTTP server terminated" + CRLF + ;
"Date: " + DTOC(DATE()) + CRLF + ;
"Time: " + TIME())
Quit
Return
Grüße
Lars