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?