Einzelnen Beitrag anzeigen

Benutzerbild von SirThornberry
SirThornberry
(Moderator)

Registriert seit: 23. Sep 2003
Ort: Bockwen
12.235 Beiträge
 
Delphi 2006 Professional
 
#8

Re: Probleme bei programmgesteuertem Start von Diensten

  Alt 7. Jun 2007, 16: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
  Mit Zitat antworten Zitat