AGB  ·  Datenschutz  ·  Impressum  







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

Dienst-Management 4 dummies

Ein Thema von Ajintaro · begonnen am 18. Nov 2004 · letzter Beitrag vom 10. Aug 2009
Antwort Antwort
Seite 1 von 2  1 2      
Benutzerbild von Ajintaro
Ajintaro

Registriert seit: 20. Okt 2004
Ort: Sankt Augustin
138 Beiträge
 
Delphi XE6 Starter
 
#1

Dienst-Management 4 dummies

  Alt 18. Nov 2004, 13:47
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
Jaimy
DAoC 2.0 -> Camelot Unchained !
  Mit Zitat antworten Zitat
Benutzerbild von sakura
sakura

Registriert seit: 10. Jun 2002
Ort: München
11.412 Beiträge
 
Delphi 11 Alexandria
 
#2

Re: Dienst-Management 4 dummies

  Alt 18. Nov 2004, 13:59
Ich habe hier mal eine Unit gepostet, die das recht einfach macht.

Mit der Methode ServiceGetStatus ermittelst Du den Status, die Rückgabewerte sind wie folgend:
Delphi-Quellcode:
//
// 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;
Die Methoden ServiceStart/ServiceStop sind zum Starten und Stoppen von Diensten.

......
Daniel W.
Ich bin nicht zurück, ich tue nur so
  Mit Zitat antworten Zitat
Benutzerbild von Ajintaro
Ajintaro

Registriert seit: 20. Okt 2004
Ort: Sankt Augustin
138 Beiträge
 
Delphi XE6 Starter
 
#3

Re: Dienst-Management 4 dummies

  Alt 18. Nov 2004, 14:43
Ja dieses File von dir hab ich auch mal in ein Testproggie eingebunden.

Aber der Aufruf ist noch so ein Ding:

ServiceGetStatus(sMachine, sService: AnsiString): DWord; sMachine ist das der PC-name? sService wär dann z.B. 'nachrichtendienst'

Delphi-Quellcode:
.....
begin
 ServiceGetStatus('mypc', 'nachrichtendienst');
end;
Jaimy
DAoC 2.0 -> Camelot Unchained !
  Mit Zitat antworten Zitat
Benutzerbild von sakura
sakura

Registriert seit: 10. Jun 2002
Ort: München
11.412 Beiträge
 
Delphi 11 Alexandria
 
#4

Re: Dienst-Management 4 dummies

  Alt 18. Nov 2004, 14:48
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).

......
Miniaturansicht angehängter Grafiken
dienst.gif  
Daniel W.
Ich bin nicht zurück, ich tue nur so
  Mit Zitat antworten Zitat
Benutzerbild von Ajintaro
Ajintaro

Registriert seit: 20. Okt 2004
Ort: Sankt Augustin
138 Beiträge
 
Delphi XE6 Starter
 
#5

Re: Dienst-Management 4 dummies

  Alt 18. Nov 2004, 15:15
stimmt!! Taadaaa! Jetzt kann ich wirklich den Nachrichtendienst stoppen und wieder starten

Jetzt muss ich nur moch im Form1.Create den Dienst-Status anzeigen lassen. Ich dachte an sowas:

Delphi-Quellcode:
procedure TForm1.Create(Sender: TObject)
begin
 if GetStatusService('', 'Messenger') then Panel1.Caption := clGreen;
end;
Hmm oder eine bool-variable erstellen und mir den Result der GetStatusService da reinschreiben?
Jaimy
DAoC 2.0 -> Camelot Unchained !
  Mit Zitat antworten Zitat
Benutzerbild von sakura
sakura

Registriert seit: 10. Jun 2002
Ort: München
11.412 Beiträge
 
Delphi 11 Alexandria
 
#6

Re: Dienst-Management 4 dummies

  Alt 18. Nov 2004, 15:23
Eher wie folgend:

Delphi-Quellcode:
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;
......
Daniel W.
Ich bin nicht zurück, ich tue nur so
  Mit Zitat antworten Zitat
Benutzerbild von Ajintaro
Ajintaro

Registriert seit: 20. Okt 2004
Ort: Sankt Augustin
138 Beiträge
 
Delphi XE6 Starter
 
#7

Re: Dienst-Management 4 dummies

  Alt 19. Nov 2004, 08:51
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:
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;
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.

Jaimy
DAoC 2.0 -> Camelot Unchained !
  Mit Zitat antworten Zitat
Benutzerbild von sakura
sakura

Registriert seit: 10. Jun 2002
Ort: München
11.412 Beiträge
 
Delphi 11 Alexandria
 
#8

Re: Dienst-Management 4 dummies

  Alt 19. Nov 2004, 08:54
Bitte Ein Tipp, die Konstanten der Art SERVICE_XXXXXX_PENDING, dass der Service gerade versucht den Status XXXXXX zu erreichen

......
Daniel W.
Ich bin nicht zurück, ich tue nur so
  Mit Zitat antworten Zitat
schuetze09

Registriert seit: 3. Mär 2004
113 Beiträge
 
Delphi 2005 Architect
 
#9

Re: Dienst-Management 4 dummies

  Alt 19. Nov 2004, 10:10
@sakura

hallo,

habe mir mal deine Unit genommen und das ganze ausprobiert, funktioniert wunderbar, aber wie kann ich einen deaktivierten Service starten?

mfg
schuetze09
  Mit Zitat antworten Zitat
Benutzerbild von sakura
sakura

Registriert seit: 10. Jun 2002
Ort: München
11.412 Beiträge
 
Delphi 11 Alexandria
 
#10

Re: Dienst-Management 4 dummies

  Alt 19. Nov 2004, 10:20
Zitat von schuetze09:
aber wie kann ich einen deaktivierten Service starten?
Gar nicht Du musst den zuerst aktivieren und dann kannst Du den auch starten. Habe ich noch nie versucht, aber in der Unit WinSvc ist die Funktion MSDN-Library durchsuchenChangeServiceConfig importiert, die sollte Dir die Möglichkeit geben den Service zu aktivieren. Anschließend kannst Du den auch starten.

......
Daniel W.
Ich bin nicht zurück, ich tue nur so
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


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 17: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