![]() |
Dienst-Management 4 dummies
Hi liebe Delphi-Coder!
da ich nicht soo der Programmier-Held bin und bei meinem aktuellen tool net weiterkomme, erbitte ich die Hilfe der DP-Gurus hier in diesen heiligen Hallen. (hmpf, hab zuviel DAOC gezockt, sry) Okay, okay. Ich möchte lediglich ein Prögrämmchen schreiben, den Dienst-Status grafisch darstellt. Quasi eine Form mit einem Panel für z.B. den allseits beliebten Nachrichtendienst. Ist der Dienst gestartet, hat das Panel die Farbe grün (Für OK). So ist der Dienst down dann hat das Panel die Farbe rot. Wenn der Dienst grad versucht wird zu starten dann gelb... Dann sollte noch die Möglichkeit bestehen eben genau dies zu Managen. Klick auf das rote Panel = "Möchten sie den Dienst starten?" bzw. Klick aufs grüne Panel = Dienst stoppen? Das ganze drumherum mit der Form und dem Panel ist ja kein Ding - nur die Dienste sind für mich wie die Relikte aus Albion. Nein jetzt net ausflippen, hab mich totgesucht und einiges gefunden. Interessant klang der ServiceManager von den Swiss-Delphi Leuten. Ich kann den Servicemanager in mein Programm einbinden, jedoch leider kann ich keine Funktion davon aufrufen... Irgendwie gibts da Fehler und soo 100%tig steig ich da net durch. *heul* Hier wird oft über Dienstmanagement gesprochen, aber so ein konkretes Beispiel Proggie oder gut erklärte Source hab ich nicht gefunden. Falls ihr irgendwie Rat wisst wäreich sehr dankbar. Gruss JJ |
Re: Dienst-Management 4 dummies
Ich habe
![]() Mit der Methode ServiceGetStatus ermittelst Du den Status, die Rückgabewerte sind wie folgend:
Delphi-Quellcode:
Die Methoden ServiceStart/ServiceStop sind zum Starten und Stoppen von Diensten.
//
// Service State -- for CurrentState // {$EXTERNALSYM SERVICE_STOPPED} SERVICE_STOPPED = $00000001; {$EXTERNALSYM SERVICE_START_PENDING} SERVICE_START_PENDING = $00000002; {$EXTERNALSYM SERVICE_STOP_PENDING} SERVICE_STOP_PENDING = $00000003; {$EXTERNALSYM SERVICE_RUNNING} SERVICE_RUNNING = $00000004; {$EXTERNALSYM SERVICE_CONTINUE_PENDING} SERVICE_CONTINUE_PENDING = $00000005; {$EXTERNALSYM SERVICE_PAUSE_PENDING} SERVICE_PAUSE_PENDING = $00000006; {$EXTERNALSYM SERVICE_PAUSED} SERVICE_PAUSED = $00000007; ...:cat:... |
Re: Dienst-Management 4 dummies
Ja dieses File von dir hab ich auch mal in ein Testproggie eingebunden.
Aber der Aufruf ist noch so ein Ding:
Delphi-Quellcode:
sMachine ist das der PC-name? sService wär dann z.B. 'nachrichtendienst'
ServiceGetStatus(sMachine, sService: AnsiString): DWord;
Delphi-Quellcode:
:gruebel:
.....
begin ServiceGetStatus('mypc', 'nachrichtendienst'); end; |
Re: Dienst-Management 4 dummies
Liste der Anhänge anzeigen (Anzahl: 1)
Für die Machine kannst Du imho, auch einen leeren String oder '.' (also einen Punkt) übergeben, wenn es der gleiche PC ist. Du musst allerdings auch die Rechte haben den Dienst zu starten/beenden. Der Dienstname des Nachrichtendienstes ist nicht sein Anzeigename, sondern der Registrierungsname, also Messenger (siehe Screen Shot).
...:cat:... |
Re: Dienst-Management 4 dummies
stimmt!! Taadaaa! Jetzt kann ich wirklich den Nachrichtendienst stoppen und wieder starten :lol:
Jetzt muss ich nur moch im Form1.Create den Dienst-Status anzeigen lassen. Ich dachte an sowas:
Delphi-Quellcode:
Hmm oder eine bool-variable erstellen und mir den Result der GetStatusService da reinschreiben?
procedure TForm1.Create(Sender: TObject)
begin if GetStatusService('', 'Messenger') then Panel1.Caption := clGreen; end; |
Re: Dienst-Management 4 dummies
Eher wie folgend:
Delphi-Quellcode:
...:cat:...
uses
WinSvc; procedure TForm1.ShowStatus begin case GetStatusService('', 'Messenger') of SERVICE_STOPPED, SERVICE_PAUSED: Panel1.Caption := 'angehalten'; SERVICE_RUNNING: Panel1.Caption := 'läuft'; SERVICE_START_PENDING, SERVICE_STOP_PENDING, SERVICE_CONTINUE_PENDING, SERVICE_PAUSE_PENDING: Panel1.Caption := 'Status wird gerade geändert'; else Panel1.Caption := 'Status ist unbekannt.'; end; end; |
Re: Dienst-Management 4 dummies
Guten Morgen!
gestern war ich leider schon weg, dehalb kam da keine Antwort mehr. Ich hab das tool fürs erste fertig bekommen dank dir Sakura! so siehts aus:
Delphi-Quellcode:
Es wird zuerst überprüft ob der Dienst (später die bestimmten Dienste) läuft und dann kann bequem gestartet oder gestoppt werden. Die Pause und den Neustart will ich noch einpflegen, sowie abhängige Dienste autoatisch mitstarten.
unit Unit1;
interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, uNTServiceControl, StdCtrls, ExtCtrls; type TForm1 = class(TForm) Button1: TButton; Button2: TButton; Panel1: TPanel; Timer1: TTimer; procedure Button1Click(Sender: TObject); procedure Button2Click(Sender: TObject); procedure Timer1Timer(Sender: TObject); // procedure FormCreate(Sender: TObject); private { Private declarations } public { Public declarations } end; var Form1: TForm1; implementation {$R *.dfm} // // Service State -- for CurrentState // (* {$EXTERNALSYM SERVICE_STOPPED} SERVICE_STOPPED = $00000001; {$EXTERNALSYM SERVICE_START_PENDING} SERVICE_START_PENDING = $00000002; {$EXTERNALSYM SERVICE_STOP_PENDING} SERVICE_STOP_PENDING = $00000003; {$EXTERNALSYM SERVICE_RUNNING} SERVICE_RUNNING = $00000004; {$EXTERNALSYM SERVICE_CONTINUE_PENDING} SERVICE_CONTINUE_PENDING = $00000005; {$EXTERNALSYM SERVICE_PAUSE_PENDING} SERVICE_PAUSE_PENDING = $00000006; {$EXTERNALSYM SERVICE_PAUSED} SERVICE_PAUSED = $00000007; *) procedure TForm1.Button1Click(Sender: TObject); begin ServiceStop('', 'Messenger', true) end; procedure TForm1.Button2Click(Sender: TObject); begin ServiceStart('', 'Messenger', true) end; procedure TForm1.Timer1Timer(Sender: TObject); begin case ServiceGetStatus('', 'Messenger') of 0: Panel1.Caption := 'Status 0'; 1: begin Panel1.Caption := 'gestoppt'; Panel1.Color := clred; end; 2: begin Panel1.Caption := 'wird gestartet'; Panel1.Color := clyellow; end; 3: Showmessage('3'); 4: begin Panel1.Caption := 'läuft'; Panel1.Color := clGreen; end; 5: Panel1.Caption := 'SERVICE_CONTINUE_PENDING'; //was auch immer das ist 6: Panel1.Caption := 'SERVICE_PAUSE_PENDING'; //was auch immer das ist 7: begin Panel1.Caption := 'pausiert'; Panel1.Color := clteal; end; else Panel1.Caption := 'unbekannter Status'; end; end; :stupid: |
Re: Dienst-Management 4 dummies
Bitte :-) Ein Tipp, die Konstanten der Art SERVICE_XXXXXX_PENDING, dass der Service gerade versucht den Status XXXXXX zu erreichen ;-)
...:cat:... |
Re: Dienst-Management 4 dummies
@sakura
hallo, habe mir mal deine Unit genommen und das ganze ausprobiert, funktioniert wunderbar, aber wie kann ich einen deaktivierten Service starten? mfg schuetze09 |
Re: Dienst-Management 4 dummies
Zitat:
![]() ...:cat:... |
Alle Zeitangaben in WEZ +1. Es ist jetzt 09:20 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