Delphi-PRAXiS
Seite 2 von 2     12   

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)

NicoDE 4. Mai 2005 12:34

Re: Herausfinden ob ein bestimmter Service installiert ist
 
Delphi-Quellcode:
uses
   WinSvc;

type
  TAnswer = (aUnknown, aYes, aNo);

function IsServiceInstalled(const MachineName, ServiceName: string;
  ServiceType: DWORD = SERVICE_DRIVER or SERVICE_WIN32;
  ServiceState: DWORD = SERVICE_STATE_ALL): TAnswer;
const
  MAX_SERVICE_NAME = 256;
  MAX_DISPLAY_NAME = 256;
type
  PEnumServiceStatusBuffer = ^TEnumServiceStatusBuffer;
  TEnumServiceStatusBuffer = record
    EnumService: TEnumServiceStatus;
    ServiceName: array [0..MAX_SERVICE_NAME-1] of Char;
    DisplayName: array [0..MAX_DISPLAY_NAME-1] of Char;
  end;
var
  SCManager: SC_HANDLE;
  EnumBuffer: array [0..7] of TEnumServiceStatusBuffer; // ~4KB Stack size
  BytesNeeded: DWORD;
  ResumeHandle: DWORD;
  ServicesReturned: DWORD;
  Service: PEnumServiceStatus;
  Index: DWORD;
begin
  Result := aUnknown;
  SCManager := OpenSCManager(PChar(MachineName), SERVICES_ACTIVE_DATABASE,
    SC_MANAGER_ENUMERATE_SERVICE);
  if (SCManager <> 0) then
    try
      Result := aNo;
      ResumeHandle := 0;
      while EnumServicesStatus(SCManager, ServiceType, ServiceState,
        EnumBuffer[0].EnumService, SizeOf(EnumBuffer), BytesNeeded,
        ServicesReturned, ResumeHandle) or
        (GetLastError = ERROR_MORE_DATA) do
      begin
        Service := @EnumBuffer[0].EnumService;
        for Index := 1 to ServicesReturned do
        begin
          if (StrIComp(PChar(ServiceName), Service.lpServiceName) = 0) then
          begin
            Result := aYes;
            Break;
          end;
          Inc(Service);
        end;
        if (Result = aYes) then
          Break;
        if (ResumeHandle = 0) then
          Break;
      end;
    finally
      CloseServiceHandle(SCManager);
    end;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
  case IsServiceInstalled(EmptyStr, 'Messenger') of
    aUnknown:
      ShowMessage('Vielleicht.');
    aYes:
      ShowMessage('Scheint so.');
    aNo:
      ShowMessage('Wohl nicht.');
  else
    ShowMessage('Hmmm.');
  end;
end;

Mephistopheles 4. Mai 2005 12:52

Re: Herausfinden ob ein bestimmter Service installiert ist
 
Danke Nico! Das spart mir Zeit :zwinker:

toyoman 4. Mai 2005 13:00

Re: Herausfinden ob ein bestimmter Service installiert ist
 
Zitat:

Zitat von Mephistopheles
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.

hääää? ich hab überhaupt nichts ignoriert!!
ich hab lediglich die frage von sakura beantwortet!
ich würds nochmals durchlesen

toyoman 4. Mai 2005 13:10

Re: Herausfinden ob ein bestimmter Service installiert ist
 
Danke an Nico und die Beteiligten

Es funzt :)

aber nochmal... ich hab nicht gewartet das mir einer den code hinfözelt nei nein..
das habt ihr falsch verstanden. ich habe nix dergleichen verlauten lassen, also bitte nicht alle Foren User in den gleichen Topf werfen. Habe in der Zwischenzeit nämlich im Internet geforscht und ähnliche Funktionen aufgetrieben... war also nicht untätig wie mir der Mephistopheles unterstellen will...

amen


Alle Zeitangaben in WEZ +1. Es ist jetzt 18:30 Uhr.
Seite 2 von 2     12   

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