Delphi-PRAXiS
Seite 2 von 3     12 3      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Prüfen ob Service läuft... (https://www.delphipraxis.net/7547-pruefen-ob-service-laeuft.html)

Luckie 8. Sep 2011 11:09

AW: Prüfen ob Service läuft...
 
Na ja, anstatt so eine lose Sammlung von Funktionen, sollte man das doch mal sauber in einer Klasse kapseln, denke ich.

ralfiii 8. Sep 2011 11:19

AW: Prüfen ob Service läuft...
 
Zitat:

Zitat von Luckie (Beitrag 1122615)
Na ja, anstatt so eine lose Sammlung von Funktionen, sollte man das doch mal sauber in einer Klasse kapseln, denke ich.

Find ich in dem Fall nicht.
Objekte machen natürlich schon Sinn, aber doch eher wenn irgendwas persistent bleibt, oder?
Bei Services wird man im Allgemeinen checken ob sie laufen, irgendwann starten, irgendwann stoppen.
Da dazwischen das Objekt aufzubehalten hat ja echt keinen Mehrwert.

Wenn's denn unbedingt sein muss könnte man Class-functions draus machen.

ASM 8. Sep 2011 11:49

AW: Prüfen ob Service läuft...
 
Zitat:

Zitat von Luckie (Beitrag 1122615)
Na ja, anstatt so eine lose Sammlung von Funktionen, sollte man das doch mal sauber in einer Klasse kapseln, denke ich.

Gibt's doch schon, sogar als Komponente einsetzbar: http://www.programmersheaven.com/mb/...n-delphi-code/

Luckie 8. Sep 2011 12:07

AW: Prüfen ob Service läuft...
 
Zitat:

Zitat von ralfiii (Beitrag 1122620)
Zitat:

Zitat von Luckie (Beitrag 1122615)
Na ja, anstatt so eine lose Sammlung von Funktionen, sollte man das doch mal sauber in einer Klasse kapseln, denke ich.

Find ich in dem Fall nicht.

Denke schon, da die Funktionen ein paar Gemeinsamkeiten haben, wie zum Beispiel den Computernamen und so. Und global muss das Objekt auch nicht sein.

Ich finde so was nicht schlecht:
Delphi-Quellcode:
ServiceManager := TServicemanager.Create;
ServiceManager.Computer := 'Komm_Puter';
ServiceManager.Service := 'Kaffee_Servcice';
Servicemanager.StartService;
Es geht ja auch darum, dass zusammengehörige Funktionen auch logisch in einer Klasse zusammengefasst werden und nicht nur physisch in einer Unit.

ralfiii 8. Sep 2011 12:14

AW: Prüfen ob Service läuft...
 
Zitat:

Zitat von Luckie (Beitrag 1122634)
Ich finde so was nicht schlecht:
Delphi-Quellcode:
ServiceManager := TServicemanager.Create;
ServiceManager.Computer := 'Komm_Puter';
ServiceManager.Service := 'Kaffee_Servcice';
Servicemanager.StartService;
Es geht ja auch darum, dass zusammengehörige Funktionen auch logisch in einer Klasse zusammengefasst werden und nicht nur physisch in einer Unit.

Hmmm
Delphi-Quellcode:
StringConcat:=TStringConcatter.Create;
StringConcat.FirstString:='Bisserl overkill, ';
StringConcat.SecondString:='findest nicht?';
StringConcat.PerformStringConcatting;
ShowMessage(StringConcat.ConcatResult;
:)
Objektorientiert ist nicht IMMER besser - meine Meinung halt.
Mir gefällt jedenfalls "ServiceStart('Komm_Puter', 'Kaffee_Servcice')" deutlich besser.

Luckie 8. Sep 2011 12:17

AW: Prüfen ob Service läuft...
 
Natürlich tut der Code das gleiche, keine Frage. Es geht mir in diesem Fall mehr um "aufgeräumten" Code.

Oder so:
Delphi-Quellcode:
ServiceManager := TServiceManager.Create('Komm_Puter', 'Kaffee_Service');
ServiceManager.Start;

Sir Rufo 8. Sep 2011 22:19

AW: Prüfen ob Service läuft...
 
Ich schmeiss mich da mal auf Luckies Seite.

Bei einem Service kann es durchaus sein, dass man den Dienst starten möchte und nach einer Zeit x wieder anhalten möchte.

Gerade kursiert hier auch noch ein CodeFragment rum, was die Statusänderungen von Services überwacht.
Das komplett in eine Klasse gegossen würde definitiv Sinn machen.

Für alle Hardcore Fans können die Funktionen auch als Class Functions zusätzlich verfügbar gemacht werden.

Delphi-Quellcode:
ServiceControl := TServiceControl.Create( 'MeinService', 'DerComputer' );
ServiceControl.OnStart := ServiceStart;
ServiceControl.Start;

TServiceControl.Start( 'DeinService', 'DeinComputer' );

Luckie 8. Sep 2011 22:56

AW: Prüfen ob Service läuft...
 
Zitat:

Zitat von Sir Rufo (Beitrag 1122754)
Ich schmeiss mich da mal auf Luckies Seite.

Danke. ;)

Ludger Seegers 24. Mai 2012 00:32

AW: Prüfen ob Service läuft...aber funktioniert nicht in einer ISAPI-DLL
 
Hallo Leute kann mir einer dabei helfen?

Ich möchte aus einer ISAPI-DLL / Webserver-Anwendung prüfen ob ein bestimmter Dienst gestartet ist.

In einem normalen Programm erhalte ich den Status korrekt.
Wenn diese Funktion in der Webserveranwendung einbaue liefert die Funktion
OpenService(SCManHandle, sService, SC_MANAGER_ALL_ACCESS) immer nur den wert 0 zurück.

Liegt das evtl. an irgendwelchen Rechten?

Danke für die Info voraus.

Ludger Seegers

function ServiceGetStatus(sMachine, sService: PChar): DWORD;
var
SCManHandle, SvcHandle: SC_Handle;
SS: TServiceStatus;
dwStat: DWORD;
begin
dwStat := 0;
SCManHandle := OpenSCManager(sMachine, nil, SC_MANAGER_CONNECT);
SaveInfo('SCmanHandle',asr(SCmanHandle));
if (SCManHandle > 0) then
begin
SvcHandle := OpenService(SCManHandle, sService, SC_MANAGER_ALL_ACCESS);
SaveInfo('SvcHandle',asr(SvcHandle));
if (SvcHandle > 0) then
begin
if (QueryServiceStatus(SvcHandle, SS)) then
dwStat := SS.dwCurrentState;
CloseServiceHandle(SvcHandle);
end;
CloseServiceHandle(SCManHandle);
end;
Result := dwStat;
end;

function ServiceRunning(sMachine, sService: PChar): Boolean;
begin
Result := SERVICE_RUNNING = ServiceGetStatus(sMachine, sService);
end;

Luckie 24. Mai 2012 00:43

AW: Prüfen ob Service läuft...
 
Und was sagt GetLastError dazu?


Alle Zeitangaben in WEZ +1. Es ist jetzt 07:20 Uhr.
Seite 2 von 3     12 3      

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