AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Win32/Win64 API (native code) Delphi Service soll sich selber stoppen
Thema durchsuchen
Ansicht
Themen-Optionen

Service soll sich selber stoppen

Ein Thema von diabox · begonnen am 26. Sep 2006 · letzter Beitrag vom 27. Sep 2006
Antwort Antwort
Benutzerbild von diabox
diabox

Registriert seit: 13. Sep 2006
61 Beiträge
 
Delphi 2010 Professional
 
#1

Service soll sich selber stoppen

  Alt 26. Sep 2006, 20:16
Delphi 7

Ich habe einen Service in dem mehrere Threads am Laufen sind. Unter anderem ein Telnetserver der bei einem bestimmten Befehl den Service beeden soll. Ich weiß aber leider nicht was ich für einen Befehl ausführen muss, wenn der Befehl eintritt. Wenn ich den ServiceThread terminiere, passiert nichts, nicht einmal ein "Wird beendet" im ServiceManager...

Wenn ich den Service im ServiceManager beende is er ruckzuck beendet und raus ausm Speicher. Also liegt es nicht an irgendner Schleife die den Service daran hindert beendet zu werden...

Hoffe ihr könnt mir trotz der knappen Beschreibung helfen...
  Mit Zitat antworten Zitat
jensw_2000
(Gast)

n/a Beiträge
 
#2

Re: Service soll sich selber stoppen

  Alt 26. Sep 2006, 20:23
versuch es mal mit


Delphi-Quellcode:
implementation
uses service;

...
...
Service.<DeinServiceName>.ServiceShutdown(<DeinServiceName>);
  Mit Zitat antworten Zitat
Benutzerbild von SirThornberry
SirThornberry
(Moderator)

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

Re: Service soll sich selber stoppen

  Alt 26. Sep 2006, 20:26
oder über die Api-Funktion: ControlService
Allerdings schickt diese Funktion auch nur dem Service eine Kommando. Somit ist es einfacher das Programm selbst zu terminieren.

Die einfachste Variante ist einfach "DoStop" aufzurufen. (Ist eine Methoden von TService)
Wenn du mit ControlService das Stop sendest wird letztendlich auch "DoStop" aufgerufen.
Jens
Mit Source ist es wie mit Kunst - Hauptsache der Künstler versteht's
  Mit Zitat antworten Zitat
Benutzerbild von diabox
diabox

Registriert seit: 13. Sep 2006
61 Beiträge
 
Delphi 2010 Professional
 
#4

Re: Service soll sich selber stoppen

  Alt 26. Sep 2006, 20:34
Danke schonmal für die schnellen antworten

Bei ServiceShutdown tut sich nichts (ruft das nicht auch nur das Event auf?).


Die Telnetkommandos werden in einer extra-Unit abgearbeitet in der ich nur die Main-Unit unter den uses habe. Wenn ich von dort telnetservice.DoStop() aufrufe erhalten ich:
Zitat:
[Fehler] uTelnetFunctions.pas(26): Undefinierter Bezeichner: 'DoStop'
Wenn ich es direkt in der Main-Unit aufrufe, bekomme ich keine Fehler. Also habe ich jetzt eine public Prozedur erstellt (in der Main-Unit), die nur DoStop() aufruft um diese Prozedur dann wiederum in meiner uTelnetFunctions.pas aufzurufen. Das Ergebnis: nichts tut sich... :-/
  Mit Zitat antworten Zitat
jensw_2000
(Gast)

n/a Beiträge
 
#5

Re: Service soll sich selber stoppen

  Alt 26. Sep 2006, 20:53
Bei ServiceShutdown tut sich nichts (ruft das nicht auch nur das Event auf?).

Hast Recht.

DoStop ist übrigens nur in TService sichtbar.

Habe es eben mal so getestet. Funktioniert bei mir.

Delphi-Quellcode:
unit service;

 
type
  TMeinSRV = class(TService)
 ...

  public

   Procedure StopIt;




implementation
  

Procedure TMeinSRV.StopIt;
begin
  DoStop;
end;



Delphi-Quellcode:
unit egal;



implementation

uses service;


....

service.MeinService.StopIt;
  Mit Zitat antworten Zitat
Benutzerbild von diabox
diabox

Registriert seit: 13. Sep 2006
61 Beiträge
 
Delphi 2010 Professional
 
#6

Re: Service soll sich selber stoppen

  Alt 26. Sep 2006, 21:07
Komisch habe den Befehl mal direkt hinter den Logeintrag gesetzt und jetzt wird angezeigt "Wird beendet"...

Eigenartig aber vielen Dank.
  Mit Zitat antworten Zitat
jensw_2000
(Gast)

n/a Beiträge
 
#7

Re: Service soll sich selber stoppen

  Alt 26. Sep 2006, 21:21
Zitat von diabox:
Komisch habe den Befehl mal direkt hinter den Logeintrag gesetzt und jetzt wird angezeigt "Wird beendet"...
Ist dein ServiceThread eventuell noch aktiv ?
  Mit Zitat antworten Zitat
Benutzerbild von diabox
diabox

Registriert seit: 13. Sep 2006
61 Beiträge
 
Delphi 2010 Professional
 
#8

Re: Service soll sich selber stoppen

  Alt 27. Sep 2006, 12:04
Hmm kann sein. Wo genau muss ich ihn denn terminieren und muss ich vorher selbst dafür sorgen, dass alle anderen Threads beendet sind?

Delphi-Quellcode:
procedure TMyService.StopMyService();
begin
MyService.ServiceThread.Terminate();
DoStop;
end;
  Mit Zitat antworten Zitat
Benutzerbild von diabox
diabox

Registriert seit: 13. Sep 2006
61 Beiträge
 
Delphi 2010 Professional
 
#9

Re: Service soll sich selber stoppen

  Alt 27. Sep 2006, 14:48
Hab jetzt n bisschen aufgeräumt und einige Threads testhalber deaktiviert. Jetzt steht beendet im Service Manager. Allerdings ist der Prozess immernoch im Speicher (also im TaskManager noch zu sehn). Erst nach ca. 20s ist er wirklcih raus... Wie kommt das? Braucht der TelnetServer so lange ums ich zu verabschieden?
  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 18:53 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