Guten abend,
also ich bin schon eine menge weiter gekommen was das Statusabfragen von Diensten angeht. Nur habe ich noch eine Frage.
In der function:
function ServiceGetStatus(sMachine, sService: PChar): DWORD;
Muss man doch für sMachine den Namen den Namen der CPU über die der Service läuft und für sService den Namen des Dienstes angeben oder?
Woher bekomme ich den Namen von sMachine raus?
Bei sService wird es warscheinlich der name wie er in der Registry steht sein oder?
Und beim Compelieren sagt mir der Compiler:
[Error] Data.pas(196): Undeclared identifier: 'SC_Handle'
[Error] Data.pas(197): Undeclared identifier: 'TServiceStatus'
[Error] Data.pas(202): Undeclared identifier: 'OpenSCManager'
[Error] Data.pas(202): Undeclared identifier: 'SC_MANAGER_CONNECT'
wenn ich das hier in meine Source einbaue:
Delphi-Quellcode:
function ServiceGetStatus(sMachine, sService: PChar): DWORD;
{******************************************}
{*** Parameters: ***}
{*** sService: specifies the name of the service to open
{*** sMachine: specifies the name of the target computer
{*** ***}
{*** Return Values: ***}
{*** -1 = Error opening service ***}
{*** 1 = SERVICE_STOPPED ***}
{*** 2 = SERVICE_START_PENDING ***}
{*** 3 = SERVICE_STOP_PENDING ***}
{*** 4 = SERVICE_RUNNING ***}
{*** 5 = SERVICE_CONTINUE_PENDING ***}
{*** 6 = SERVICE_PAUSE_PENDING ***}
{*** 7 = SERVICE_PAUSED ***}
{******************************************}
var
SCManHandle, SvcHandle: SC_Handle;
SS: TServiceStatus;
dwStat: DWORD;
begin
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 IsServiceRunning(sMachine, sService: PChar): Boolean;
begin
Result := SERVICE_RUNNING = ServiceGetStatus(sMachine, sService);
end;
function IsServiceInstalled(sMachine, sService: PChar): Boolean;
begin
Result := -1 <> ServiceGetStatus(sMachine, sService);
// genau hier sagt der Compiler liefert immer True bzw. False
end;
[edit=SirThornberry]Beiträge zusammengeführt - nächstes mal bitte verwenden - Mfg, SirThornberry[/edit]
---------------------------------------------------------------------------
Mein Vista-Kind bringt frischen Wind
Gruß DaRedd aka The Red Dragon