Einzelnen Beitrag anzeigen

Viktorii

Registriert seit: 19. Jul 2007
358 Beiträge
 
#1

Reg Key löschen schlägt fehl

  Alt 16. Mär 2012, 15:22
Moin.

Ich möchte mir ein kleines (Kommandozeilen-) tool schreiben, welches mir ein paar RegKeys löscht. Dieses führe ich dann später natürlich mit Admin Rechten aus. Nur scheinen sich manche Keys nicht löschen zu lassen. Andere aber schon:

Delphi-Quellcode:
var
  Reg : TRegistry;
  Key : string;
  aKeys : array of string;
  KeyHandle : hKey;

begin
  try
    SetLength(aKeys,4);
    aKeys[0] := '\System\ControlSet001\Control\Class\{00a45f18-31eb-463d-a395-0b0c4995f48e}';
    aKeys[1] := '\System\ControlSet002\Control\Class\{00a45f18-31eb-463d-a395-0b0c4995f48e}';
    aKeys[2] := '\System\ControlSet001\Enum\USB\VID_1847&PID_8000';
    aKeys[3] := '\System\ControlSet002\Enum\USB\VID_1847&PID_8000';

    Reg := TRegistry.Create;
    Reg.RootKey := HKEY_LOCAL_MACHINE;

    for Key in aKeys do
    begin
      WriteLn(Key);
      if Reg.KeyExists(Key) then
        WriteLn('Key exists. Try to delete key: ' + BoolToStr(Reg.DeleteKey(Key)))
      else
        WriteLn('Key does not exist. Skip.');
      WriteLn(#13#10);
    end;

    //--------------------------------------------------------------------------
    // Hier testweise direkt mit API Fkt.
    WriteLn(SysErrorMessage(RegOpenKeyEx(HKEY_LOCAL_MACHINE, 'System\ControlSet001\Enum\USB\', 0, KEY_ALL_ACCESS, KeyHandle)));

    WriteLn(SysErrorMessage(RegDeleteKey(KeyHandle, PChar('VID_1847&PID_8000'))));
    //--------------------------------------------------------------------------

    WriteLn('Press ENTER to quit...');
    Read(Key);
  except
    on E: Exception do
      Writeln(E.ClassName, ': ', E.Message);
  end;
end.
Die letzten beiden lassen sich nicht löschen auch direkt mit Api Fkt nicht:

Zitat:
\System\ControlSet001\Control\Class\{00a45f18-31eb-463d-a395-0b0c4995f48e}
Key exists. Try to delete key: -1


\System\ControlSet002\Control\Class\{00a45f18-31eb-463d-a395-0b0c4995f48e}
Key exists. Try to delete key: -1


\System\ControlSet001\Enum\USB\VID_1847&PID_8000
Key exists. Try to delete key: 0


\System\ControlSet002\Enum\USB\VID_1847&PID_8000
Key exists. Try to delete key: 0


Zugriff verweigert
Das Handle ist ungültig
Press ENTER to quit...
Wieso funktioniert das nicht?
  Mit Zitat antworten Zitat