Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi HKEY_LOCAL_MACHINE als User lesen (https://www.delphipraxis.net/139762-hkey_local_machine-als-user-lesen.html)

fischi 4. Sep 2009 19:48


HKEY_LOCAL_MACHINE als User lesen
 
Hallo,

bisher lese ich Einträge in die Registry unter HKEY_LOCAL_MACHINE mit folgenden Code (Delphi4):

Delphi-Quellcode:
var HKLMPfadDB, PfadDB: string;
const registPfad: string = '\Software\Eigene\Programmname';//Registrypfad
      defaultDB: string = 'D:\Mein\Pfad\Datei.mdb';
    
procedure TFRM_Main.FormCreate(Sender: TObject);
//####Registry Einträge lesen#############
//####Pfad zur Datenbank
begin
  regist:= TRegistry.Create;
  regist.RootKey:= HKEY_LOCAL_MACHINE;
  regist.OpenKeyReadOnly(registPfad+'\Datenbank');
  if length(regist.ReadString('Pfad_DB')) = 0
  then begin
          MessageDlg('HKEY_LOCAL_MACHINE Lesefehler! Die Default Einstellungen werden gesetzt.',mtError,[mbOk],0);
          PfadDB:= defaultDB;
       end
  else PfadDB:= regist.ReadString('Pfad_DB');
 ShowMessage(PfadDB);
regist.Free;
end;
Funktioniert bis Win2k, bei WinXP leider nur mit Admin Rechten.
Mit Userrechten lande ich immer bei den Default Einstellungen.
Der Pfad ist natürlich in der Registry eingetragen und kann dort auch mit Regedit betrachtet werden. Wo ist da jetzt der Harken, was muß ich anpassen?

Danke schon mal

Thomas

MagicAndre1981 4. Sep 2009 20:02

Re: HKEY_LOCAL_MACHINE als User lesen
 
TRegistry.Create will immer mit Schreibrechten öffnen. Gib an, dass du nur lesen willst, dann klappt es.

Bernhard Geyer 4. Sep 2009 20:05

Re: HKEY_LOCAL_MACHINE als User lesen
 
Zitat:

Zitat von fischi
Funktioniert bis Win2k, bei WinXP leider nur mit Admin Rechten.

Funktioniert auch unter Win2k nicht. Probier einfach mal den Code als Benutzer der Gruppe "Gast". Unter W2k haben die Hauptuser lokale Adminrechte (Ist normalerweise auch bei XP der Fall).

Zacherl 4. Sep 2009 20:06

Re: HKEY_LOCAL_MACHINE als User lesen
 
Delphi-Quellcode:
TRegistry.Create(KEY_READ)

fischi 5. Sep 2009 09:11

Re: HKEY_LOCAL_MACHINE als User lesen
 
Hallo,

Danke für Eure schnellen Antworten. Ein
Delphi-Quellcode:
regist:= TRegistry.Create(KEY_READ);
brgingt mich nicht weiter. Da werden zu "viele Parameter" bemängelt. Ich dachte das nur lesen ist mit
Delphi-Quellcode:
regist.OpenKeyReadOnly(registPfad+'\Datenbank');
erledigt. Leider falsch gedacht. Immer noch ratlos...

Mit Win2k macht keinen Ärger (ebend nochmal getestet) - der Eintrag müß natürlich schon in der Registry stehen.

Fischi

Bernhard Geyer 5. Sep 2009 10:48

Re: HKEY_LOCAL_MACHINE als User lesen
 
Zitat:

Zitat von fischi
brgingt mich nicht weiter. Da werden zu "viele Parameter" bemängelt.

Welche Delphi-Version. Bei sehr alten Delphi-Versionen gab es keine möglichkeit das mit dem "normalen" TRegistry zu erledigen.

Aber dafür könnst du deine TMyRegistry ableiten oder die fertigen Funktionen der JCL verwenden.

fischi 5. Sep 2009 11:14

Re: HKEY_LOCAL_MACHINE als User lesen
 
Hallo,

Zitat:

Welche Delphi-Version. Bei sehr alten Delphi-Versionen gab es keine möglichkeit
das mit dem "normalen" TRegistry zu erledigen.
Delphi4

Grüße Fischi

Christian Seehase 5. Sep 2009 12:07

Re: HKEY_LOCAL_MACHINE als User lesen
 
Moin Thomas,

erst einmal herzlich willkommen hier in der Delphi-PRAXiS.

Ich habe den Code mal etwas überarbeitet:


Delphi-Quellcode:
var
  regist : TRegistry;

begin
  regist:= TRegistry.Create;
  try
    regist.RootKey:= HKEY_LOCAL_MACHINE;
    if regist.OpenKeyReadOnly(registPfad+'\Datenbank') then begin
      try
        if length(regist.ReadString('Pfad_DB')) = 0 then begin
          MessageDlg('HKEY_LOCAL_MACHINE Lesefehler! Die Default Einstellungen werden gesetzt.',mtError,[mbOk],0);
          PfadDB:= defaultDB;
        end else begin
          PfadDB:= regist.ReadString('Pfad_DB');
        end;
      finally
        regist.CloseKey;
      end;
    end else begin
      ShowMessage('OpenKey fehlgeschlagen');
    end;
    ShowMessage(PfadDB);
  finally
    regist.Free;
  end;
end;
Man sollte immer sicherstellen, dass belegte Resourcen auch wieder freigegeben werden, deshalb try/finally beim Create und OpenKey.
Da OpenKeyReadOnly den Erfolg meldet (ich hoffe auch in D4 ;-)), sollte man dass auch benutzen.

Wenn es fehlschlägt, dann prüf' mal was passiert, wenn Du den \ am Beginn des Pfades weglässt.

fischi 5. Sep 2009 14:11

Re: HKEY_LOCAL_MACHINE als User lesen
 
Hallo Christian, Hallo der Liste,

Dein Code funktioniert! :-)

Zitat:

Da OpenKeyReadOnly den Erfolg meldet (ich hoffe auch in D4 ;-)), sollte man dass auch benutzen.
Genau da ist der Fehler gewesen.

Das "\" in Pfad ist wirklich überflüssig. Ist noch gar nicht aufgefallen. Und mit der Freigabe der Resorcen ist wohl einiges bei probiern, kopieren und ändern unter den Tisch gefallen. Muß das jetzt eh sauber ins Programm einbauen. Noch einmal Danke und ein schönes WE

Thomas


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