Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   Delphi Registry - KeyExists liefert immer false (https://www.delphipraxis.net/134552-registry-keyexists-liefert-immer-false.html)

Neuni 24. Mai 2009 19:25


Registry - KeyExists liefert immer false
 
Hallo,

ich verzweifle gerade an der Registry.
Ich benutze folgenden Code, um auszulegen, ob ein Eintrag existiert:
Delphi-Quellcode:
      reg := TRegistry.Create;

      try

        reg.RootKey:=HKEY_LOCAL_MACHINE;

        reg.OpenKey('Software\Microsoft\Windows NT\CurrentVersion\Winlogon', true);

          reg.WriteString('testen','jo');

          if reg.KeyExists('testen') then begin
            Edit1.Text := 'Gibts';
          end else begin
            Edit1.Text := 'Gibts nicht';
          end;


      finally
        reg.free;
      end;
Das Teil liefert aber immer false (bzw. als Ausgabe "Gibts nicht"). Ich habe jetzt mal einen WriteString mit reingebaut und es ist immernoch so.
Wenn ich per Regedit schaue wird der Key aber erstellt und existiert dann auch.

Ich finde den Fehler ehrlich gesagt nicht...vllt. könnt ihr mir ja weiterhelfen.

PS: Nutze Delphi 7 PE

jaenicke 24. Mai 2009 19:28

Re: Registry - KeyExists liefert immer false
 
Existiert der Schlüssel denn dann? Schreiben tust du einen Wert, das wäre dann ValueExists.

Warum wirfst du das Ergebnis von OpenKey einfach weg?

Neuni 24. Mai 2009 19:33

Re: Registry - KeyExists liefert immer false
 
Autsch! Alles klar...KeyExists und ValueExists verwechselt :wall:

Bin schon ruhig :mrgreen:
Danke!

jaenicke 24. Mai 2009 19:36

Re: Registry - KeyExists liefert immer false
 
Wie gesagt solltest du aber auch den Wert von OpenKey verwenden:
Delphi-Quellcode:
if OpenKey(...) then
begin

end
else
  ShowMessage('Schlüssel konnte nicht geöffnet werden!');
So in der Art. ;-)

himitsu 24. Mai 2009 19:42

Re: Registry - KeyExists liefert immer false
 
Zitat:

Delphi-Quellcode:
reg.WriteString('testen','jo');

if reg.KeyExists('testen') then begin

du schreibst einen Value und prüfst einen Key

[add]
@jaenicke: ups, den entsprechende Satzteil hab ich ganz übersehn :oops:

jaenicke 24. Mai 2009 19:43

Re: Registry - KeyExists liefert immer false
 
Zitat:

Zitat von himitsu
du schreibst einen Value und prüfst einen Key

Soweit ist doch schon alles klar, das habe ich doch gleich im ersten Post geschrieben und ist doch auch schon beantwortet. :lol:

Jetzt bin ich ja nur noch einmal auf den Rückgabewert von OpenKey eingegangen. ;-)

Neuni 24. Mai 2009 20:53

Re: Registry - KeyExists liefert immer false
 
Die Rückgabe vom OpenKey ist mir recht egal, denn sollte der Key nicht existieren, ist das Windows hinne :)

jaenicke 24. Mai 2009 20:56

Re: Registry - KeyExists liefert immer false
 
Dass du den Schlüssel erstellst, wenn er nicht existiert, ist klar, das hast du ja so programmiert.

Du forderst für dein Programm also immer Administratorrechte an?
Weil nur dann kannst du einigermaßen sicher sein, dass du Zugriff auf den Schlüssel hast. ;-)


Alle Zeitangaben in WEZ +1. Es ist jetzt 11:27 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz