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 Zugriff verweigert beim Lesen obwohl Key selbst erstellt wurde (https://www.delphipraxis.net/197764-registry-zugriff-verweigert-beim-lesen-obwohl-key-selbst-erstellt-wurde.html)

mikelpahl 2. Sep 2018 20:45

Registry Zugriff verweigert beim Lesen obwohl Key selbst erstellt wurde
 
Hallo,
eigentlich dachte ich Werte in Registry HKCU schreiben und lesen ist leicht; hatte ich vor vielen Jahren schon mal gemacht. In einem größeren Programm soll ein Wert in die Registry geschrieben werden und gelesen werden. Leider kommt bei Lesen "Zugriff verweigert" und ValueExists meldet immer false. Hab dazu mal ein Testprogramm gemacht:

Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var reg : TRegistry;
begin
  try
    Reg := TRegistry.Create(KEY_WRITE);
    reg.OpenKey('Software\DHBW\Way2Pay\',True);
    try
      if reg.ValueExists('Nummer') then
      begin
        Zahl:=reg.ReadInteger('Nummer');
        inc(Zahl);
        reg.WriteInteger('Nummer',Zahl);
      end
      else
      begin
        reg.WriteInteger('Nummer',Zahl);
        Zahl:=reg.ReadInteger('Nummer'); //Nur zum Test macht keine Sinn
      end;
    except
        MessageDlg(reg.LastErrorMsg,mtError,[mbOK],0,mbOK);
    end;
  finally
    reg.Free;
  end;
end;

Rechte sind auf HKCU\Softwae default und User hat Vollzugriff.
Entweder Delphi macht was woran ich nicht denke oder ich bin jetzt völlig senil.

Dalai 2. Sep 2018 20:51

AW: Registry Zugriff verweigert beim Lesen obwohl Key selbst erstellt wurde
 
Wenn du Delphi-Referenz durchsuchenTRegistry.Access (ob nun per Konstruktor oder nachträglich) auf KEY_WRITE setzt, ist sehr wahrscheinlich nur das Schreiben erlaubt, aber nicht das Lesen.

Grüße
Dalai

TERWI 2. Sep 2018 21:24

AW: Registry Zugriff verweigert beim Lesen obwohl Key selbst erstellt wurde
 
... oder einfach: Reg := TRegistry.Create();
ohne Angabe des Access-Params.
Ist dann Standard => Reg := TRegistry.Create(KEY_ALL_ACCESS);

mikelpahl 2. Sep 2018 22:43

AW: Registry Zugriff verweigert beim Lesen obwohl Key selbst erstellt wurde
 
Joo danke das wars.
Mit Reg := TRegistry.Create(); gehts.
Bin echt nicht auf die Idee gekommen, dass eine Schreibrecht nicht das Leserecht beinhaltet.

Vielen Vielen Dank :bounce1:

Andreas L. 4. Sep 2018 10:16

AW: Registry Zugriff verweigert beim Lesen obwohl Key selbst erstellt wurde
 
Du hast vergessen das Root anzugeben. z. B.
Delphi-Quellcode:
  Reg.RootKey := HKEY_CURRENT_USER;

DeddyH 4. Sep 2018 10:42

AW: Registry Zugriff verweigert beim Lesen obwohl Key selbst erstellt wurde
 
http://docwiki.embarcadero.com/Libra...egistry.Create
Zitat:

Mit Create wird ein TRegistry-Objekt instantiiert. Dabei erhält die Eigenschaft RootKey den Wert HKEY_CURRENT_USER und die Eigenschaft LazyWrite den Wert true. Wenn der Parameter AAccess übergeben wird, wird dessen Wert für die Initialisierung der Eigenschaft Access verwendet. Ansonsten wird Access mit KEY_ALL_ACCESS initialsiert.
;)


Alle Zeitangaben in WEZ +1. Es ist jetzt 01:25 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