![]() |
Registry-Schlüssel löschen
Alsoooooo:
Ich speichere die Einstellungen von meinen Programmen in ein einem Unterschlüssel von: 'HKCU\Software\MichaelPuff'. In dem Programmen baue ich eine Routine ein, die die Programmeinstellunegn wieder löschen soll. Kein Problem so weit. Jetzt kann es aber vorkommen, dass mehrere von meinen Programmen ihre Einstellungen dort speichern. Das sähe dann so aus:
Code:
Löscht jetzt das letzte Programm seine Einstellungen aus meinem Schlüssel, soll es auch den leeren Schlüssel 'MichaelPuff' löschen. Und das klappt irgendwie nicht. Ich bekomme an der betreffenden Stelle im Code immer 'Zugriff verweigert' zurück.
HKCU\Software\MichaelPuff
Programm1 Programm2 Hier mein Code:
Delphi-Quellcode:
Was mache ich falsch? Ich bekomme es einfach nicht hin. :?
function DelRegSettings(const CompanyKey, SubKey: String): Boolean;
var reg: TRegistry; bRes: Boolean; sl: TStringList; begin reg := TRegistry.Create; try reg.RootKey := HKEY_CURRENT_USER; bRes := reg.KeyExists(CompanyKey); if bRes then begin bRes := reg.OpenKey(CompanyKey, False); if bRes then begin sl := TStringList.Create; try reg.GetKeyNames(sl); if sl.IndexOf(SubKey) <> -1 then begin bRes := reg.DeleteKey(SubKey); end; finally FreeAndNil(sl); end; reg.CloseKey; end; bRes := Reg.OpenKey(CompanyKey, False); if bRes then begin sl := TStringList.Create; reg.GetKeyNames(sl); //#TODO1: Hier stimmt noch was nicht!!! if sl.Count = 0 then begin bRes := reg.DeleteKey('MichaelPuff'); // <- 'Zugriff verweigert!!! // Test ShowMessage(SysErrorMessage(GetLasterror)); end; reg.CloseKey; end; end; finally FreeAndNil(reg); end; result := bRes; end; |
Re: Registry-Schlüssel löschen
Du musst das reg.CloseKey vor das reg.DeleteKey schreiben, weil geöffnete Schlüssel nicht gelöscht werden können!
|
Re: Registry-Schlüssel löschen
Hatte ich auch schon gedacht. Und ich meine es auch schon so probiert zu haben.
Delphi-Quellcode:
Geht auch nicht. 'Zugriff verweigert'.
bRes := Reg.OpenKey(CompanyKey, False);
if bRes then begin sl := TStringList.Create; reg.GetKeyNames(sl); reg.CloseKey; // <- CloseKey hier!!! //#TODO1: Hier stimmt noch was nicht!!! if sl.Count = 0 then begin bRes := reg.DeleteKey('MichaelPuff'); // Test ShowMessage(SysErrorMessage(GetLasterror)); end; end; |
Re: Registry-Schlüssel löschen
Du musst ja auch bRes := reg.DeleteKey(CompanyKey); schreiben!!!
|
Re: Registry-Schlüssel löschen
Autsch. Zu meiner Entschuldigung: Es war schon spät und ich hatte schon eine halbe Flasche Sekt getrunken. :mrgreen:
|
Re: Registry-Schlüssel löschen
Zitat:
|
Re: Registry-Schlüssel löschen
Für die CodeLib noch mal komplett: Denkt euch irgendeinen aussagekräftigen Titel aus, mir fällt keiner ein. :?
Was die Funktion macht, steht oben im ersten Post und ist, denke ich, universell einsetztbar, wenn man seine Einstellungen aus der Registry löschen will. Ich habe sie noch etwas verbessert und optimiert.
Delphi-Quellcode:
CompanyKey steht zum Beispiel für 'HKCU\Software\MeineFirma' und SubKey entsprechend dann für den Programmnamen der Firma.
function DelRegSettings(const CompanyKey, SubKey: string): Boolean;
var reg: TRegistry; bRes: Boolean; sl: TStringList; begin reg := TRegistry.Create; try reg.RootKey := HKEY_CURRENT_USER; // gibt es was zu löschen? bRes := reg.KeyExists(CompanyKey); if bRes then begin // Schlüssel öffnen bRes := reg.OpenKey(CompanyKey, False); if bRes then begin sl := TStringList.Create; try // Subkeys holen reg.GetKeyNames(sl); // ist zu löschender Schlüssel vorhanden? if sl.IndexOf(SubKey) <> -1 then begin bRes := reg.DeleteKey(SubKey); end; // Liste mit Subkeys löschen sl.Clear; // noch mal alle Subkeys holen reg.GetKeyNames(sl); reg.CloseKey; // keine Subkeys if sl.Count = 0 then bRes := reg.DeleteKey(CompanyKey); finally FreeAndNil(sl); end; end; // OpenKey end; // KeyExists finally FreeAndNil(reg); end; result := bRes; end; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 00:08 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz