Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   Delphi Herausfinden ob ein bestimmter Service installiert ist (https://www.delphipraxis.net/45322-herausfinden-ob-ein-bestimmter-service-installiert-ist.html)

toyoman 4. Mai 2005 09:28


Herausfinden ob ein bestimmter Service installiert ist
 
hallo

ich möchte möglichst einfach rausfinden ob ein bestimmter service installiert ist, bevor ich den Status diese Service abfrage.

wie ich den Status des Service abfrage ist mir klar und auch schon eingebaut, nur hab ich das Problem, dass wenn der Service NICHT installiert ist, die Abfrage als Resultat bringt der Service sei "running" also er laufe, was natürlich quatsch ist.

sakura 4. Mai 2005 09:50

Re: Herausfinden ob ein bestimmter Service installiert ist
 
Folgende Funktion liefert E_FAIL zurück, wenn der Service nicht installiert ist. Getestet unter Win2003.
Delphi-Quellcode:
uses
   WinSvc;

function ServiceGetStatus(sMachine, sService: AnsiString): Integer;
var
   srvManager,srvHandle: SC_Handle;
   srvStatus: TServiceStatus;
   hStat: Integer;
begin
   hStat := E_FAIL;
   srvManager := OpenSCManager(PChar(sMachine), nil, SC_MANAGER_CONNECT);
   if srvManager > 0 then
   begin
      srvHandle := OpenService(srvManager, PChar(sService), SERVICE_QUERY_STATUS);
      if srvHandle > 0 then
      begin
         if QueryServiceStatus(srvHandle, srvStatus) then
            hStat := srvStatus.dwCurrentState;
         CloseServiceHandle(srvHandle);
      end;
      CloseServiceHandle(srvManager);
   end;
   Result := hStat;
end;
...:cat:...

toyoman 4. Mai 2005 10:13

Re: Herausfinden ob ein bestimmter Service installiert ist
 
Zitat:

Zitat von sakura
Folgende Funktion liefert E_FAIL zurück, wenn der Service nicht installiert ist. Getestet unter Win2003.
Delphi-Quellcode:
uses
   WinSvc;

function ServiceGetStatus(sMachine, sService: AnsiString): Integer;
var
   srvManager,srvHandle: SC_Handle;
   srvStatus: TServiceStatus;
   hStat: Integer;
begin
   hStat := E_FAIL;
   srvManager := OpenSCManager(PChar(sMachine), nil, SC_MANAGER_CONNECT);
   if srvManager > 0 then
   begin
      srvHandle := OpenService(srvManager, PChar(sService), SERVICE_QUERY_STATUS);
      if srvHandle > 0 then
      begin
         if QueryServiceStatus(srvHandle, srvStatus) then
            hStat := srvStatus.dwCurrentState;
         CloseServiceHandle(srvHandle);
      end;
      CloseServiceHandle(srvManager);
   end;
   Result := hStat;
end;
...:cat:...

Funktioniert bei mir leider nicht, ich kriege trotzdem den Status 4 zurück, welcher eigentlich für running steht.
Ich versteh das nicht...

sakura 4. Mai 2005 10:30

Re: Herausfinden ob ein bestimmter Service installiert ist
 
Zitat:

Zitat von toyoman
Funktioniert bei mir leider nicht, ich kriege trotzdem den Status 4 zurück, welcher eigentlich für running steht.

Welches OS nutzt Du?

...:cat:...

NicoDE 4. Mai 2005 10:49

Re: Herausfinden ob ein bestimmter Service installiert ist
 
Warum nicht EnumServicesStatus(Ex)?
Alles andere ist nur eine Krücke.
(BTW, Handles sind keine Integer - ein Vergleich auf > 0 ist meiner bescheidenen Meinung nach 'unpassend')

Mephistopheles 4. Mai 2005 11:50

Re: Herausfinden ob ein bestimmter Service installiert ist
 
Zitat:

Zitat von NicoDE
Warum nicht EnumServicesStatus(Ex)?

Weil man da keine Handles braucht :zwinker: ... oder so :gruebel:

Zitat:

Zitat von NicoDE
(BTW, Handles sind keine Integer - ein Vergleich auf > 0 ist meiner bescheidenen Meinung nach 'unpassend')

Integer schon, aber nicht vorzeichenbehaftet ;) ... aber hier reicht's den Leuten wohl - und für INVALID_HANDLE_VALUE wird es ja auch funktionieren. Nur später, wenn dann wirklich mal ein Fehler auftaucht, sucht man sich tot :mrgreen:

toyoman 4. Mai 2005 12:06

Re: Herausfinden ob ein bestimmter Service installiert ist
 
Zitat:

Zitat von sakura
Zitat:

Zitat von toyoman
Funktioniert bei mir leider nicht, ich kriege trotzdem den Status 4 zurück, welcher eigentlich für running steht.

Welches OS nutzt Du?

...:cat:...

XP SP1

Mephistopheles 4. Mai 2005 12:15

Re: Herausfinden ob ein bestimmter Service installiert ist
 
Schonmal EnumServicesStatusEx() oder EnumServicesStatus() versucht? Oder muß man hier immer sofort ein mundgerechtes Beispiel dazugeben?!

toyoman 4. Mai 2005 12:30

Re: Herausfinden ob ein bestimmter Service installiert ist
 
Zitat:

Zitat von Mephistopheles
Schonmal EnumServicesStatusEx() oder EnumServicesStatus() versucht? Oder muß man hier immer sofort ein mundgerechtes Beispiel dazugeben?!

was soll diese Aussage nun bringen?
Ich habe nicht nach einem mundgerechten Beispiel gesucht sondern nach einer Möglichkeit.
Solche Aussagen liebt man wirklich :roll:

Mephistopheles 4. Mai 2005 12:32

Re: Herausfinden ob ein bestimmter Service installiert ist
 
Ja das war ein Hinweis schon weiter oben von Nico. Aber du ignorierst offenbar Nicos Vorschlag geflissentlich, weil du dann die Doku durchlesen müßtest o.ä?!

Ich werde mich mal eben an ein kleines Beispiel setzen, damit du nicht zu sehr suchen mußt ... dauert ein paar Minuten. Also Geduld.


Alle Zeitangaben in WEZ +1. Es ist jetzt 23:11 Uhr.
Seite 1 von 2  1 2      

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