(Moderator)
Registriert seit: 23. Sep 2003
Ort: Bockwen
12.235 Beiträge
Delphi 2006 Professional
|
Re: Probleme bei programmgesteuertem Start von Diensten
7. Jun 2007, 17:03
hmm, dann schau mal mit folgender Funktion welcher Name dir für den Dienst zurück gegeben wird:
Delphi-Quellcode:
function GetServiceName(ADisplayName: String): String;
var
lGiveback : String;
lManager : Cardinal;
lMem,
lServiceStatus : PEnumServiceStatus;
lNeeded,
lCnt,
lResHandle : Cardinal;
lCount : Integer;
begin
ADisplayName := AnsiLowerCase(ADisplayName);
lGiveback := '';
lManager := OpenSCManager(nil, nil, SC_MANAGER_ALL_ACCESS or SC_MANAGER_ENUMERATE_SERVICE);
if (lManager <> 0) then
begin
lResHandle := 0;
lMem := nil;
EnumServicesStatus(lManager, SERVICE_WIN32 or SERVICE_DRIVER, SERVICE_STATE_ALL, lMem^, 0, lNeeded, lCnt, lResHandle);
if (GetLastError = ERROR_MORE_DATA) then
begin
lResHandle := 0;
GetMem(lMem, lNeeded);
if EnumServicesStatus(lManager, SERVICE_WIN32, SERVICE_STATE_ALL, lMem^, lNeeded, lNeeded, lCnt, lResHandle) then
begin
lServiceStatus := lMem;
lCount := 0;
while (lCount < lCnt) and (lGiveback = '') do
begin
if (ADisplayName = AnsiLowerCase(String(lServiceStatus^.lpDisplayName))) then
lGiveback := String(lServiceStatus^.lpServiceName);
lServiceStatus := Pointer(Cardinal(lServiceStatus) + SizeOf(TEnumServiceStatus));
inc(lCount);
end;
end;
FreeMem(lMem);
end;
CloseServiceHandle(lManager);
end;
result := lGiveback;
end;
Vielleicht muss Groß-/Kleinschreibung beachtet werden.
Jens Mit Source ist es wie mit Kunst - Hauptsache der Künstler versteht's
|
|
Zitat
|