Entwickler-Ecke

Dateizugriff - Wieder Registry problem


patrick - Di 15.10.02 20:40
Titel: Wieder Registry problem
auch wenn ichs nicht gern mach:
her unten stehende quellcode funktioniert nicht!:

aus dem schlüssel "keyfile" wird ein weiterer schlüssel ausgelesen der als valve darin enthalten ist.
dieser wird anschließend geöffnet.
aus dem schlüssel soll nun der wert von "DBText"
ausgelesten und angezeigt werden. und genau das funktioniert nicht :?


Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
procedure TForm1.TabSheet5Show(Sender: TObject);
var buttoncount,i:integer;
    regitem,regitemname:string;
begin
reg:=Tregistry.Create;
try
  reg.RootKey:=HKEY_LOCAL_MACHINE;
  reg.OpenKey('\software\mysoft\library\',true);
    regitem:=reg.ReadString('keyfile');
    reg.CloseKey;
    reg.OpenKey(regitem,false);
    showmessage(regitem); //´zu kontrolle ob der key überhaupt geöffnet wurde
    regitemname:=reg.ReadString('DBText'); // <-das findet er nicht
    showmessage('Name: '+regitemname);
finally
  reg.closekey;
end;
reg.Free;
end;

THX


Delete - Di 15.10.02 21:28

Dein try-finally-Block hängt etwas daneben. Nimm mal das reg.Free in das finally rein.

Gib beim zweiten Lesen mal den kompletten Pfad an.


Delete - Mi 16.10.02 07:32

Luckie hat folgendes geschrieben:
Gib beim zweiten Lesen mal den kompletten Pfad an.

Na ja, Luckie. Wir wissen aber nicht ob das der Fehler ist. Grob betrachtet müsste der Code funktionieren. Und wenn ich z.B. lese
patrick hat folgendes geschrieben:
aus dem schlüssel "keyfile" wird ein weiterer schlüssel ausgelesen der als valve darin enthalten ist

dann vermute ich, dass dort der komplette Schlüssel drin steht.

@Patrick: Wie ist das bei dir? Steht unter "keyfile" eine Angabe wie

Quelltext
1:
Software\Irgendwo\Irgendwas                    

oder einfach nur

Quelltext
1:
Irgendwas                    

Im letzteren Fall würde ich auf Luckie hören und den kompletten Schlüssel (von der Root an) angeben. Und befindet sich der gesuchte Schlüssel überhaupt auch in HKEY_LOCAL_MACHINE?

Und zu guter Letzt wieder der übliche Hinweis für unsere NT/2000/XP-Zuschauer:
Da es nur um das Auslesen von Werten geht, würde ich die Registry erst mal so öffnen

Quelltext
1:
reg := TRegistry.Create(KEY_READ);                    

(was u.a. mit HKLM zu tun hat), und auch auf den ersten Schlüssel nur lesend zugreifen:

Quelltext
1:
reg.OpenKey('Software\mysoft\library',FALSE)                    

(denn: wenn er nicht existiert und angelegt werden muss, wird als Rückgabewert für den gesuchten Schlüssel auch nur ein Leerstring geliefert)


patrick - Mi 16.10.02 12:27

also in dem schlüssel ist nur der pfad angegeben
der schlüssel der ausgelesen werden soll ist dbtext
der schlüssel ist ebenfalls im HKEY_LOCAL_MACHINE

cih hab win98
das mit dem reg.free probier ich mal vieleicht wars das ja schon
den wert

Quelltext
1:
reg.OpenKey(regitem,false);                    

hab ich auf false gesetzt damit nicht irgend ein verzeichnis entsteht das ich später nicht mehr wiederfindet