Eintrag in der Registry löschen?

Hallo,

ich möchte einen Eintrag aus der Registry wieder löschen, nur komme ich mit dem Befehl „DeleteKey“ irgendwie nicht weiter.

// Code:
var regist: TRegistry;
begin
regist:=TRegistry.Create;
regist.RootKey:=HKEY_CURRENT_USER;
regist.OpenKey(‚Software\MeineFirma\MeinProgramm\1.0‘, true);
regist.DeleteKey('MeinProgramm);
regist.CloseKey;
regist.free;
end;

Kann mir jemand einen Tipp geben was ich da falsch machen?
Vielen Dank im voraus,

Markus

ich möchte einen Eintrag aus der Registry wieder löschen, nur
komme ich mit dem Befehl „DeleteKey“ irgendwie nicht weiter.

Hallo Markus,

etwas mehr Informationen wären hilfreich. Wie äußert sich das „nicht Weiterkommen“? Fehlermeldung? Wenn ja: Welche Zeile (Debugger)? Und: Unter welchem Betriebssystem läuft das Proggi? Win NT? Wenn ja: Hast Du schon in der Online-Hilfe zu „DeleteKey“ nachgelesen, und den Hinweis für Win NT („Under Windows NT, subkeys must be explicitly deleted by separate calls to DeleteKey.“) befolgt? In dem Beispiel in der Hilfe gibt es auch keinen „CloseKey“-Befehl. Ist Dir das aufgefallen? Wenn ja: Ist der Befehl in Deinem Code OK?

Gruß
Martin

Hallo Martin,

sorry vielleicht haste Recht, war eine schlechte Beschreibung.
Also ich bekomme keine Fehlermeldung sondern der Eintrag wird feinfach nur nicht gelöscht! ich benutzte Win 2000. Ich kann einen Eintrag erzeugen, den Wert ändern; nur löschen lässt er sich nicht!

// code eines buttons der löschen soll

procedure TForm1.Button3Click(Sender: TObject);
var regist: TRegistry;
begin
regist:=TRegistry.Create;
regist.RootKey:=HKEY_CURRENT_USER;
regist.OpenKey(‚Software\MeineFirma\MeinProgramm\1.0‘, true);
regist.DeleteKey(‚MeineFirma‘);
regist.CloseKey; //mit oder ohne, Eintrag wird nicht glöscht
regist.free;
ShowMessage(‚Eintrag aus der Registry gelöscht‘);
end;

Wäre dir für deine Hilfe dankbar

Gruss Markus

Hallo Markus,

Also ich bekomme keine Fehlermeldung sondern der Eintrag wird
feinfach nur nicht gelöscht!
ich benutzte Win 2000. Ich kann einen Eintrag erzeugen, den
Wert ändern; nur löschen lässt er sich nicht!

Aha. Dann würde ich an Deiner Stelle folgendes ausprobieren:

regist.OpenKey(‚Software\MeineFirma\MeinProgramm\1.0‘,
true);
regist.DeleteKey(‚MeineFirma‘);

„Meine Firma“ steht nun mitten im Pfad. Du erwartest wahrscheinlich, daß die Unterschlüssel „MeinProgramm“ und „1.0“ automatisch mitgelöscht werden. Vielleicht ist das jedoch beim DeleteKey-Befehl überhaupt nicht vorgesehen. Um das zu checken, würde ich einfach mal einen einzigen „Test-Schlüssel“ irgendwo anlegen und dann versuchen, den zu löschen. Da der ja dann das „Pfadende“ ist, sollte das funktionieren.

Weiterer Vorschlag: „OpenKey“ und „DeleteKey“ sind Funktionen, die [nicht] TRUE zurückliefern, wenn sie [nicht] erfolgreich waren. Ich würde deshalb den obigen Code modifizieren zu

r := regist.OpenKey(‚Software\MeineFirma\MeinProgramm\1.0‘,
true);
r := regist.DeleteKey(‚MeineFirma‘);

(r = boolsche Variable), das Codestück im Einzelschrittmodus durchlaufen und mir angucken, was r für Werte zugewiesen bekommt.

Vielleicht setzt Du meine Tipps um und postest anschließend hier, was dabei rausgekommen ist.

MfG
Martin

Hallo,

ich möchte einen Eintrag aus der Registry wieder löschen, nur
komme ich mit dem Befehl „DeleteKey“ irgendwie nicht weiter.

Versuche mal:

// Code:
var regist: TRegistry;
begin
 regist:=TRegistry.Create;
 regist.RootKey:=HKEY\_CURRENT\_USER;
 regist.DeleteKey('Software\MeineFirma',true);
 regist.free;
end;

Soweit ich weiss können geöffnete Schlüssel nicht gelöscht werden.

Alexander