AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Fehlermeldung beim Stoppen eines Service

Ein Thema von harald44 · begonnen am 3. Dez 2006 · letzter Beitrag vom 4. Dez 2006
Antwort Antwort
harald44

Registriert seit: 3. Dez 2006
Ort: Dierikon - CH
5 Beiträge
 
Delphi 5 Professional
 
#1

Fehlermeldung beim Stoppen eines Service

  Alt 3. Dez 2006, 20:54
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
  Mit Zitat antworten Zitat
Benutzerbild von thkerkmann
thkerkmann

Registriert seit: 7. Jan 2006
Ort: Pulheim Brauweiler
464 Beiträge
 
Delphi 2010 Professional
 
#2

Re: Fehlermeldung beim Stoppen eines Service

  Alt 3. Dez 2006, 21:24
Hi,

Was Du vergessen hast ?

Ein wenig Information wie dein Dienst aufgebaut ist - damit wir dir helfen können.

Zeig mal etwas Code.

Gruss
Thomas Kerkmann
Ich hab noch einen Koffer in Borland.
http://thomaskerkmann.wordpress.com/
  Mit Zitat antworten Zitat
harald44

Registriert seit: 3. Dez 2006
Ort: Dierikon - CH
5 Beiträge
 
Delphi 5 Professional
 
#3

Re: Fehlermeldung beim Stoppen eines Service

  Alt 4. Dez 2006, 18:11
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.
  Mit Zitat antworten Zitat
Benutzerbild von thkerkmann
thkerkmann

Registriert seit: 7. Jan 2006
Ort: Pulheim Brauweiler
464 Beiträge
 
Delphi 2010 Professional
 
#4

Re: Fehlermeldung beim Stoppen eines Service

  Alt 4. Dez 2006, 18:36
Hallo,

da lass mal das

Self.ServiceThread.Terminate; lieber weg, der ist nämlich schon weg wenn Shutdown kommt.

Du hast ja keinen Thread selber abgespalten, den du verwalten musst.

Gruss
Thomas Kerkmann
Ich hab noch einen Koffer in Borland.
http://thomaskerkmann.wordpress.com/
  Mit Zitat antworten Zitat
Benutzerbild von SirThornberry
SirThornberry
(Moderator)

Registriert seit: 23. Sep 2003
Ort: Bockwen
12.235 Beiträge
 
Delphi 2006 Professional
 
#5

Re: Fehlermeldung beim Stoppen eines Service

  Alt 4. Dez 2006, 18:38
ich würde es schlicht und einfach auf deine Endlosschleife schieben.
Jens
Mit Source ist es wie mit Kunst - Hauptsache der Künstler versteht's
  Mit Zitat antworten Zitat
harald44

Registriert seit: 3. Dez 2006
Ort: Dierikon - CH
5 Beiträge
 
Delphi 5 Professional
 
#6

Re: Fehlermeldung beim Stoppen eines Service

  Alt 4. Dez 2006, 19:28
Hi thkerkmann
Das Problem tritt auch ohne diese Zeile auf, habe sie erst eingefügt wegem dem Problem.
self.ServiceThread.Terminate; Hi SirThornberry
Du musst in der Methode "ServiceExecute" etwas performance brauchen. Ansonsten Stoppt windows den Service sofort wieder.
  Mit Zitat antworten Zitat
harald44

Registriert seit: 3. Dez 2006
Ort: Dierikon - CH
5 Beiträge
 
Delphi 5 Professional
 
#7

Re: Fehlermeldung beim Stoppen eines Service

  Alt 4. Dez 2006, 19:39
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
  Mit Zitat antworten Zitat
Benutzerbild von thkerkmann
thkerkmann

Registriert seit: 7. Jan 2006
Ort: Pulheim Brauweiler
464 Beiträge
 
Delphi 2010 Professional
 
#8

Re: Fehlermeldung beim Stoppen eines Service

  Alt 4. Dez 2006, 20:48
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:
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;
Dann sollte es gehen.

Gruss
Thomas Kerkmann
Ich hab noch einen Koffer in Borland.
http://thomaskerkmann.wordpress.com/
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 02:29 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz