AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Win32/Win64 API (native code) Delphi Herausfinden ob ein bestimmter Service installiert ist
Thema durchsuchen
Ansicht
Themen-Optionen

Herausfinden ob ein bestimmter Service installiert ist

Ein Thema von toyoman · begonnen am 4. Mai 2005 · letzter Beitrag vom 4. Mai 2005
Antwort Antwort
Seite 1 von 2  1 2      
toyoman

Registriert seit: 2. Jun 2003
323 Beiträge
 
Delphi 2010 Enterprise
 
#1

Herausfinden ob ein bestimmter Service installiert ist

  Alt 4. Mai 2005, 10:28
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.
  Mit Zitat antworten Zitat
Benutzerbild von sakura
sakura

Registriert seit: 10. Jun 2002
Ort: Unterhaching
11.412 Beiträge
 
Delphi 12 Athens
 
#2

Re: Herausfinden ob ein bestimmter Service installiert ist

  Alt 4. Mai 2005, 10:50
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;
......
Daniel Lizbeth
Ich bin nicht zurück, ich tue nur so
  Mit Zitat antworten Zitat
toyoman

Registriert seit: 2. Jun 2003
323 Beiträge
 
Delphi 2010 Enterprise
 
#3

Re: Herausfinden ob ein bestimmter Service installiert ist

  Alt 4. Mai 2005, 11:13
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;
......
Funktioniert bei mir leider nicht, ich kriege trotzdem den Status 4 zurück, welcher eigentlich für running steht.
Ich versteh das nicht...
  Mit Zitat antworten Zitat
Benutzerbild von sakura
sakura

Registriert seit: 10. Jun 2002
Ort: Unterhaching
11.412 Beiträge
 
Delphi 12 Athens
 
#4

Re: Herausfinden ob ein bestimmter Service installiert ist

  Alt 4. Mai 2005, 11:30
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?

......
Daniel Lizbeth
Ich bin nicht zurück, ich tue nur so
  Mit Zitat antworten Zitat
NicoDE
(Gast)

n/a Beiträge
 
#5

Re: Herausfinden ob ein bestimmter Service installiert ist

  Alt 4. Mai 2005, 11:49
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')
  Mit Zitat antworten Zitat
Mephistopheles
(Gast)

n/a Beiträge
 
#6

Re: Herausfinden ob ein bestimmter Service installiert ist

  Alt 4. Mai 2005, 12:50
Zitat von NicoDE:
Warum nicht EnumServicesStatus(Ex)?
Weil man da keine Handles braucht ... oder so

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
  Mit Zitat antworten Zitat
toyoman

Registriert seit: 2. Jun 2003
323 Beiträge
 
Delphi 2010 Enterprise
 
#7

Re: Herausfinden ob ein bestimmter Service installiert ist

  Alt 4. Mai 2005, 13:06
Zitat von sakura:
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?

......
XP SP1
  Mit Zitat antworten Zitat
Mephistopheles
(Gast)

n/a Beiträge
 
#8

Re: Herausfinden ob ein bestimmter Service installiert ist

  Alt 4. Mai 2005, 13:15
Schonmal EnumServicesStatusEx() oder EnumServicesStatus() versucht? Oder muß man hier immer sofort ein mundgerechtes Beispiel dazugeben?!
  Mit Zitat antworten Zitat
toyoman

Registriert seit: 2. Jun 2003
323 Beiträge
 
Delphi 2010 Enterprise
 
#9

Re: Herausfinden ob ein bestimmter Service installiert ist

  Alt 4. Mai 2005, 13:30
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
  Mit Zitat antworten Zitat
Mephistopheles
(Gast)

n/a Beiträge
 
#10

Re: Herausfinden ob ein bestimmter Service installiert ist

  Alt 4. Mai 2005, 13:32
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.
  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 02:42 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