Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Laufende Dienste abfragen (lokal und Netzwerk?) (https://www.delphipraxis.net/140682-laufende-dienste-abfragen-lokal-und-netzwerk.html)

stho 23. Sep 2009 20:51


Laufende Dienste abfragen (lokal und Netzwerk?)
 
Hallo Leute

Ich hätte da mal eine Frage:

1. Kann man den Zustand eines Dienstes von einem lokalen Computer abfragen?
2. Kann man übers Netzwerk abfragen ob ein Computer den Nachrichtendienst aktiviert/deaktiviert hat?

Es geht bei Punkt 2 NUR um das auslesen. Bei Punk 1 vielleicht auch um das deaktivieren/aktivieren ;-)


Ihr habt es sicher schon erraten, es soll ein Net-Send-Proggi werden.

ich habe zwar schon im Forum geguckt und Google genutzt doch leider bin ich auf nichts passendes gestoßen.

Bitte ein Tipp von eurer Seite, das währe hilfreich ;-)





Vielen Dank schonmal


EDIT:
Bin morgen erst wieder on um zu antworten.
Bis dahin: Gute Nacht und schlaft gut...

mkinzler 23. Sep 2009 20:54

Re: Laufende Dienste abfragen (lokal und Netzwerk?)
 
Net help services / net start / net stop

Luckie 23. Sep 2009 21:11

Re: Laufende Dienste abfragen (lokal und Netzwerk?)
 
Liste der Anhänge anzeigen (Anzahl: 1)
Dienste auflisten: http://www.michael-puff.de/Developer...Services.shtml

Und im Anhang meine NetSend Klasse.

Allerdings würde ich mir eine andere Art der Kommunikation überlegen. Seit XP SP2 ist der Dienst deaktiviert und ab Vista gibt es ihn nicht mehr.

stho 24. Sep 2009 10:54

Re: Laufende Dienste abfragen (lokal und Netzwerk?)
 
hm... ich bedanke mich schonmal für die ausführliche Antwort :thumb:

Jedoch gestaltet sich das Verstehen dieses Textes als ziemlich schwer :gruebel: Auch ein EInbauen in mein Programm war nicht möglich da es mir einige Fehler ausgeschmissen hat...

Naja, ich werd mir den Link zu dem Thread mal speichern und versuchen in den Nächsten Wochen / Monaten das ganze nach zu lernen um dann zu vertstegen was du da macht. :-)



Vielen Dank trotzdem
Liebe Grüße
stho

nahpets 24. Sep 2009 11:50

Re: Laufende Dienste abfragen (lokal und Netzwerk?)
 
Hallo,

schau Dir bitte mal das da an: ServiceManager. Wenn ich das recht verstehe, handelt es sich um eine Klasse, mit der Du den Zustand eines Dienstes auf einem "beliebigen" Rechner abfragen kannst und den Zustand auch ändern kannst. Es ist damit z. B. möglich, remote auf einem anderen Rechner Dienste zu überwachen und ggfls. gestoppte Dienste wieder zu starten.

ein Auszug aus der Benutzung dieser Klasse:
Delphi-Quellcode:
...
Try
  ServiceManager.MachineName := '\\' + sServer; // Servername
  ServiceManager.ServiceName := sl[k];         // Liste der Dienste, die geprüft werden sollen
  iError := 0;
  Repeat
    Inc(iError);
  Until ServiceManager.Open or (iError >= 3);
  iError := 0;
  Repeat
    Inc(iError);
  Until (ServiceManager.State <> 0) or (iError >= 3);
  Case ServiceManager.State Of
    SERVICE_RUNNING         : sColor := sEvenOdd;                 // Status ist okay.
    SERVICE_START_PENDING,
    SERVICE_CONTINUE_PENDING : sColor := ' class="yellow" '; // Status wird vermutlich in Kürze okay sein.
    SERVICE_STOP_PENDING,
    SERVICE_PAUSE_PENDING   : Begin // Status muß geändert werden.
                                     // Hier müssen wir warten, bis Service angehalten bzw. beendet wurde.
                                 sColor := ' class="red" ';
                                 bMailIt := True;
                               End;
    SERVICE_STOPPED         : Begin // Status muß geändert werden.
                                 If Not ServiceManager.Start Then Begin
                                   sColor := ' class="red" ';
                                 End;
                                 Case ServiceManager.State Of
                                   SERVICE_RUNNING : Begin
                                                       sColor := ' class="yellow" '; // Status ist okay.
                                                       bMailIt := True;
                                                     end;
                                 else begin
                                     sColor := 'class="red"';
                                     slSSI.Add('<tr><th ' + sColor + ' colspan="5">'
                                            + 'Service konnte nicht gestartet werden?' + '</th></tr>');
                                     bMailIt := True;
                                   end;
                                 end;
                               End;
    SERVICE_PAUSED          : Begin // Status muß geändert werden.
                                 sColor := ' class="red" ';
                                 ServiceManager.Continue;
                                 iError := 0;
                                 while ServiceManager.IsPending
                                 and (iError < 30) do Begin // bis zu 15 Sekunden auf den Start warten
                                   Sleep(500);
                                   Inc(iError);
                                 end;
                                 Case ServiceManager.State Of
                                   SERVICE_RUNNING : sColor := ''; // Status ist okay.
                                 else
                                   bMailIt := True;
                                 end;
                               End;
  Else
    sColor := ' class="red" '; // Status muß durch Anwender geprüft werden.
    bMailIt := True;
  End;
  ServiceManager.Close;
Except
  On e : Exception Do Begin
    ErrorLog(tmDienste.Name + ' Exception: ' + e.Message,0);
  End;
End;
...
Der Codeausschnitt ist so nicht zu verwenden, er dient nur als "Ideenlieferant". Er wird in einem Dienst benutzt, der zur Serverüberwachung u. a. das Laufen definierter Dienste prüft und ggfls. die Dienste neu startet bzw. im Fehlerfalle per Mail den Admin benachrichtigt. Der Dienst läuft auf mehreren Servern, die sich so gegenseitig überwachen.

stho 24. Sep 2009 13:40

Re: Laufende Dienste abfragen (lokal und Netzwerk?)
 
Nun, es ist wirklich nett von dir und deinen Eifer kann man nur bewundern :-) :thumb:

Aber da ich ein Delphi-Anfänger mit 8 Wochen Erfahrung bin kann ich deinen Text genau so gut lesen wie meine Schwester (4 Jahre alt)... 8)

Liebe Grüße
stho


Alle Zeitangaben in WEZ +1. Es ist jetzt 09:12 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