![]() |
Fehlermeldung beim Stoppen eines Service
Hallo Zusammen
Habe eine ServiceAnwendung erstellt (TServiceApplication). Beim Stoppen der ServiceAnwendung über Computerverwaltung/Dienste erhalte ich folgende Windows-Fehlermeldung "Der Dienst Service1 konnte nicht beendet werden. Der Dienst hat keinen Fehler zurückgegeben ...." Was habe ich vergessen ??? Danke |
Re: Fehlermeldung beim Stoppen eines Service
Hi,
Was Du vergessen hast ? Ein wenig Information wie dein Dienst aufgebaut ist - damit wir dir helfen können. Zeig mal etwas Code. Gruss |
Re: Fehlermeldung beim Stoppen eines Service
Hi thkerkmann
Es ist nur ein kleiner TestService. Hier der Code :
Delphi-Quellcode:
unit Unit1;
interface uses Windows, Messages, SysUtils, Classes, Graphics, Controls, SvcMgr, Dialogs; type TService1 = class(TService) procedure ServiceExecute(Sender: TService); procedure ServiceShutdown(Sender: TService); procedure ServiceStop(Sender: TService; var Stopped: Boolean); private stopServ : Boolean; public function GetServiceController: TServiceController; override; { Public-Deklarationen } end; var Service1: TService1; implementation {$R *.DFM} procedure ServiceController(CtrlCode: DWord); stdcall; begin Service1.Controller(CtrlCode); end; function TService1.GetServiceController: TServiceController; begin Result := ServiceController; end; procedure TService1.ServiceExecute(Sender: TService); var sleepCnt : Integer; begin AllowStop := true; stopServ := false; sleepCnt := 0; while not stopServ do begin sleep(100); inc(sleepCnt); if (not stopServ) AND (sleepCnt >= 10) then begin sleepCnt := 0; beep; end; end; end; procedure TService1.ServiceShutdown(Sender: TService); begin stopServ := true; self.ServiceThread.Terminate; ErrCode := 0; Win32ErrCode := 0; MessageBeep(2); end; procedure TService1.ServiceStop(Sender: TService; var Stopped: Boolean); begin stopServ := true; ErrCode := 0; Win32ErrCode := 0; stopped := true; end; end. |
Re: Fehlermeldung beim Stoppen eines Service
Hallo,
da lass mal das
Delphi-Quellcode:
lieber weg, der ist nämlich schon weg wenn Shutdown kommt.
Self.ServiceThread.Terminate;
Du hast ja keinen Thread selber abgespalten, den du verwalten musst. Gruss |
Re: Fehlermeldung beim Stoppen eines Service
ich würde es schlicht und einfach auf deine Endlosschleife schieben.
|
Re: Fehlermeldung beim Stoppen eines Service
Hi thkerkmann
Das Problem tritt auch ohne diese Zeile auf, habe sie erst eingefügt wegem dem Problem.
Delphi-Quellcode:
Hi SirThornberry
self.ServiceThread.Terminate;
Du musst in der Methode "ServiceExecute" etwas performance brauchen. Ansonsten Stoppt windows den Service sofort wieder. |
Re: Fehlermeldung beim Stoppen eines Service
Habe noch ne info vergessen
Der "beep", letzte Zeile in Methode "ServiceShutdown" ist nicht zu hören. Es scheint diese Methode wird überhaupt nicht aufgerufen. (Sie ist im DFM-File Deklariert). code DFM-File :
Delphi-Quellcode:
object Service1: TService1
OldCreateOrder = False DisplayName = 'Service1' Interactive = False OnExecute = ServiceExecute OnShutdown = ServiceShutdown OnStop = ServiceStop Left = 300 Top = 199 Height = 540 Width = 783 end |
Re: Fehlermeldung beim Stoppen eines Service
Mein Gott jetzt hab ichs....
Es fehlt tatsächlich was. Da du keinen eingenen Thread abspaltest, hast du mit deiner Execute Methode natürlich sowas wie eine Endlosschleife, und die Anweisungen an den Service können gar nicht verarbeitet werden. Du musst in diese Schleife ähnlich wie bei GUI programmen sowas wie Application.ProcessMessages einbauen. Im Service heist das dann ServiceThread.ProcessRequests(false); Also:
Delphi-Quellcode:
Dann sollte es gehen.
procedure TService1.ServiceExecute(Sender: TService);
var sleepCnt: Integer; begin AllowStop := true; stopServ := false; sleepCnt := 0; while not stopServ do begin sleep(100); inc(sleepCnt); if (not stopServ) and (sleepCnt >= 10) then begin sleepCnt := 0; beep; end; ServiceThread.ProcessRequests(false); end; end; Gruss |
Alle Zeitangaben in WEZ +1. Es ist jetzt 06:55 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz