![]() |
Eintrag in Registrierungsdatenbank schreiben
Hi,
meine Frage: Bin ich dumm oder bin ich dumm? :stupid: :gruebel:
Delphi-Quellcode:
Ich habe bei OpenKey sowohl True, als auch False ausprobiert (Hab wieder vergessen wozu das gut war).
var
R: TRegistry; begin R := TRegistry.Create(HKEY_LOCAL_MACHINE); R.OpenKey('SOFTWARE\Pyrgo\Vertretungsplan\', False); R.WriteString('Hash', MD5Print(MD5String(edtPw1.Text))); R.Free; Ich verstehe nicht, warum er bei mir keinen Eintrag erstellt (natürlich habe ich die Rechte dazu, auf die Reg-DB zuzugreifen.), dabei habe ich den Code 1:1 aus einem alten Programm kopiert, wo es eigentlich funktioniert hat ... :mrgreen: EDIT: Ganz vergessen. Der Key existiert vorher nicht, das Verzeichnis Pyrgo\Vertretunsplan auch nicht. Aber ich glaube da ist das True bzw. False für verantwortlich bei OpenKey (True müsste glaube ich für Erstellen bzw. Überschreiben sein.) |
Re: Eintrag in Registrierungsdatenbank schreiben
Da fehlt das CloseKey.
Erst von CloseKey wird der Wert in die Registry geschrieben. P.S. Du bist dumm ;-) |
Re: Eintrag in Registrierungsdatenbank schreiben
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var Reg: TRegistry; begin Reg := TRegistry.Create; try Reg.RootKey := HKEY_LOCAL_MACHINE; if Reg.OpenKey('SOFTWARE\Pyrgo\Vertretungsplan\', true) then begin Reg.WriteString('Foo','Bar'); Reg.CloseKey; end; finally Reg.Free; end; end; |
Re: Eintrag in Registrierungsdatenbank schreiben
:wall: :wall: :wall:
Das ist ja dasselbe wie mit AssignFile und CloseFile .... Naja, mein Infolehrer hätte den Fehler eh nicht gefunden. So dumm kann ich dann ja nicht sein. :mrgreen: |
Re: Eintrag in Registrierungsdatenbank schreiben
Zitat:
Du kannst Dir folgendes merken. Diese beiden Befehle gehören immer zusammen: Open - Close, Assign - Close, Create - Free. Wenn Du eine Türe aufmachst, dann machst Du sie ja auch wieder zu, oder? Du startest den Motor des Autos, fährst in der Gegend rum. Wenn Du angekommen bist, machst Du den Motor ja auch wieder aus, oder? |
Re: Eintrag in Registrierungsdatenbank schreiben
Zitat:
|
Re: Eintrag in Registrierungsdatenbank schreiben
Mal als Admin versucht? Als Hauptbenutzer ging es hier bei mir.
|
Re: Eintrag in Registrierungsdatenbank schreiben
Ich habe nur einen Account. Und der ist normalerweise der Admin. :P
|
Re: Eintrag in Registrierungsdatenbank schreiben
Und Du hast mein Beispiel genommen bzw. RootKey gesetzt?
|
Re: Eintrag in Registrierungsdatenbank schreiben
Nein, ich habe meins mit CloseKey genommen. Denn so hat das ja früher auch mal geklappt. Deins funzt einwandfrei. Aber meines soll auch funzen. :stupid:
|
Re: Eintrag in Registrierungsdatenbank schreiben
Der Parameter im Konstruktor von TRegistry bezieht sich aber nicht auf den Wurzelknoten, sondern auf den Zugriffsmodus. Von daher verwundert mich das schon, dass das schonmal funktioniert haben soll.
|
Re: Eintrag in Registrierungsdatenbank schreiben
Ruft die Methode Free nicht automatsich CloseKey auf?
|
Re: Eintrag in Registrierungsdatenbank schreiben
Zitat:
TRegistry ist direkt von TObject abgeleitet. Und das TRegistry.Free ist das TObject.Free. |
Re: Eintrag in Registrierungsdatenbank schreiben
Na dann guck dir mal den Destruktor von TRegistry an:
Delphi-Quellcode:
Das TRegistry von TObject abgeleitet ist, heißt ja noch lange nicht, dass im Destruktor nichts weiter passiert. Und da Free Destroy aufruft, kann man durch aus sagen, dass Free indirekt auch CloseKey aufruft. Meine Vermutung basierte darauf, da auch TFielStream.Free die Datei schliesst.
destructor TRegistry.Destroy;
begin CloseKey; inherited; end; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 01:33 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