Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   Delphi Service Status auslesen (https://www.delphipraxis.net/90678-service-status-auslesen.html)

lemi4ever 21. Apr 2007 19:23


Service Status auslesen
 
Also ich habe mir da 2 Funktionen aus dem Forum geholt. Nun beide kann ich auch problemlos auslesen. Nun kommt aber mein Problem
den Dienst bei welchem ich den ServiceGetStatus auslesen will kann auf jedem Computer unterschiedlich 'SQLANYs_sql'+ Computername. Das funktioniert nun aber nicht da die inkompatible Typen verwende. PAnsiChar & String.

kann mir da jemand helfen.






Delphi-Quellcode:
function FComputername: String;
var
  CompName: Array [0 .. 256] of char;
  size: DWORD;
begin
  size := 256;
  GetComputerName(Compname, size);
  Result := CompName;
end;


{}

function ServiceGetStatus(sMachine, sService: PChar): DWORD;

var
  SCManHandle, SvcHandle: SC_Handle;
  SS: TServiceStatus;
  dwStat: DWORD;

begin
sService := [b]'SQLANYs_sql'+ FComputername;[/b]
  dwStat := 0;
  // Open service manager handle.
  SCManHandle := OpenSCManager(sMachine, nil, SC_MANAGER_CONNECT);
  if (SCManHandle > 0) then
  begin
    SvcHandle := OpenService(SCManHandle, sService, SERVICE_QUERY_STATUS);
    // if Service installed
    if (SvcHandle > 0) then
    begin
      // SS structure holds the service status (TServiceStatus);
      if (QueryServiceStatus(SvcHandle, SS)) then
        dwStat := ss.dwCurrentState;
      CloseServiceHandle(SvcHandle);
    end;
    CloseServiceHandle(SCManHandle);
  end;
  Result := dwStat;
end;

function ServiceRunning(sMachine, sService: PChar): Boolean;
begin
  Result := SERVICE_RUNNING = ServiceGetStatus(sMachine, sService);
end;
[edit=Christian Seehase]Delphi-Tags gesetzt. Bitte künftig selber machen. Danke. Mfg, Christian Seehase[/edit]

CalganX 21. Apr 2007 19:26

Re: Service Status auslesen
 
Der Sinn von Prozeduren und Funktionen ist gerade, dass man ihnen Parameter übergeben kann. Warum überschreibst du die denn direkt? Wenn du die Funktion ServiceRunning aufrufst, musst du einfach nur den Parameter übergeben. Den Parameter dann zu überschreiben ist absolut unschön, bishin sogar falsch.

Ansonsten kannst du einen String zu PChar umwandeln:
Delphi-Quellcode:
EinPCHar := @EinString[1];
Ein PChar ist nur ein Zeiger auf die Speicherstelle, an der ein String beginnt der mit dem Zeichen #0 endet.

Und bitte verwende die [delphi]- oder [pre]-Tags für Quellcodes.

Chris

renekr 21. Aug 2007 15:30

Re: Service Status auslesen
 
Hi,
ich bin auch gerade dabei etwas mit Services zu machen!
Allerdings möchte ich gerne den Starttyp des Dienstes abändern in Manuell.

wäre das möglich?

mfg


Alle Zeitangaben in WEZ +1. Es ist jetzt 02:48 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 by Thomas Breitkreuz