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 Kann Registry-Werte nicht auslesen! (https://www.delphipraxis.net/44877-kann-registry-werte-nicht-auslesen.html)

max666 26. Apr 2005 11:13


Kann Registry-Werte nicht auslesen!
 
Hallo!

Ich habe ein kleines Programm geschrieben, welches unter Administrator-Rechten super läuft. Wenn ich das Programm mit einem User mit eingeschränken Rechten laufen lasse, kann das Programm folgende Registry-Werte nicht mehr lesen. Diese Werte sind aber wichtig, damit das Programm die Konfikurationsdatein findet.

Hat jemand eine Idee!

Gruß
max666


Delphi-Quellcode:
function tform1.getpath(i: integer): string;
var regist: TRegistry;
    path: string;
begin
regist:=TRegistry.Create;
regist.RootKey:=HKEY_CURRENT_USER;
regist.OpenKey('Software\meinprog', false);
if i=1 then path:=regist.ReadString('work-dir') + 'start.ini';
if i=2 then path:=regist.ReadString('work-dir');
if i=3 then path:=regist.ReadString('work-dir') + 'button_1.ini';
if i=4 then path:=regist.ReadString('work-dir') + 'button_2.ini';
regist.CloseKey;
regist.Free;
result:=path;
end;

NicoDE 26. Apr 2005 11:15

Re: Kann Registry-Werte nicht auslesen!
 
Zitat:

Zitat von max666
regist.RootKey:=HKEY_CURRENT_USER;

Dieser Zweig der Registry ist benutzer-bezogen. Bist Du sicher, dass die Werte bei dem Benutzer überhaupt in der Registry vorhanden sind?

Christian Seehase 26. Apr 2005 11:22

Re: Kann Registry-Werte nicht auslesen!
 
Moin Max,

mir fallen da noch ein paar Dinge auf:

Zum einen solltest Du die Freigabe des Registry-Objektes mit try/finally sicherstellen.
OpenKey gibt Dir zurück (true oder false), ob der Aufruf erfolgeich war, falls nicht gibt es auch keinen Key zu schliessen, falls ja, solltest Du das Schliessen auch absichern.
Deine If-Zeilen könntest Du als case-Anweisung darstellen.
Path wird nicht initialisiert, aber, in jedem Falle Result zugwiesen.

max666 26. Apr 2005 11:25

Re: Kann Registry-Werte nicht auslesen!
 
Hallo!

Ja, die Einträge existrieren!
Aber was meinst Du mit "benutzer-bezogen"?

max666 26. Apr 2005 11:27

Re: Kann Registry-Werte nicht auslesen!
 
Path könnte ich initialisieren und eine Case-Anweisung könnte ich auch verwenden.
Nur leider hilft mir das nicht weiter, warum die Werte unter Benutzer mit eingeschränkten Rechten nicht gelesen werden.

Christian Seehase 26. Apr 2005 11:34

Re: Kann Registry-Werte nicht auslesen!
 
Moin Max,

Benutzer bezogen meint, dass HKEY_CURRENT_USER bei jedem Anwender anders aussehen kann.

Wenn die Einträge wirklich existieren kannst Du ja mal versuchen statt OpenKey OpenKeyReadOnly zu verwenden, oder die Eigenschaft Access (ich glaube die heisst so, hab' gerade kein Delphi zur Hand) auf KEY_READ setzen.

NicoDE 26. Apr 2005 11:35

Re: Kann Registry-Werte nicht auslesen!
 
Zitat:

Zitat von max666
Aber was meinst Du mit "benutzer-bezogen"?

Das jeder Benutzer in diesem Zweig eine eigene Registry hat.

MathiasSimmack 26. Apr 2005 11:36

Re: Kann Registry-Werte nicht auslesen!
 
Oder:
Delphi-Quellcode:
reg := TRegistry.Create(KEY_READ);

max666 26. Apr 2005 11:43

Re: Kann Registry-Werte nicht auslesen!
 
Hallo!

Jetzt habe ich dort folgendes stehen:

Delphi-Quellcode:
function tform1.getpath(i: integer): string;
var regist: TRegistry;
    path: string;
    janein: Boolean;
begin
path:='';
//regist:=TRegistry.Create;
regist := TRegistry.Create(KEY_READ);
regist.RootKey:=HKEY_CURRENT_USER;
janein:=regist.OpenKeyReadOnly('Software\meinprog');
if janein=true then showmessage('ja') else showmessage('Nein');
if i=1 then path:=regist.ReadString('work-dir') + 'start.ini';
if i=2 then path:=regist.ReadString('work-dir');
if i=3 then path:=regist.ReadString('work-dir') + 'button_1.ini';
if i=4 then path:=regist.ReadString('work-dir') + 'button_2.ini';
regist.CloseKey;
regist.Free;
result:=path;
end;
Es wird mir auch gesagt, dass der Schlüssel existiert. Nur der Wert "work-dir" wird nicht gelesen.

Gruß
MAx666

MathiasSimmack 26. Apr 2005 11:51

Re: Kann Registry-Werte nicht auslesen!
 
Mal unabhängig von irgendwelchen anderen Dingen: Bitte benutze try/finally bzw. try/except. Das wird zwar dein Problem nicht lösen, aber es gehört sich einfach so. :stupid:

Ansonsten: Dass der Schlüssel existiert, heißt ja nicht, dass auch der Wert existiert. Oder kannst du das als Fehler definitiv ausschließen?

Mattin 26. Apr 2005 11:59

Re: Kann Registry-Werte nicht auslesen!
 
Hallo,

versuchs mal so... vielleicht klappt das ja.

Delphi-Quellcode:
begin
    regist := TRegistry.Create(KEY_READ);
    try
      regist.RootKey := HKEY_CURRENT_USER;
      if regist.OpenKeyReadOnly('Software\meinprog') then
      begin
        if i = 1 then result := regist.ReadString('work-dir') + 'start.ini';
        if i = 2 then result := regist.ReadString('work-dir');
        if i = 3 then result := regist.ReadString('work-dir') + 'button_1.ini';
        if i = 4 then result := regist.ReadString('work-dir') + 'button_2.ini';
      end else ShowMessage('Schlüssel nicht vorhanden !');
     finally
      regist.Free;
     end;

bigg 26. Apr 2005 11:59

Re: Kann Registry-Werte nicht auslesen!
 
mahlzeit,
ich habe dein Beispiel mal umgestellt:

Delphi-Quellcode:
function TForm1.GetPath(i: Integer): String;
  var Reg: TRegistry; Path: String;
  const wk = 'work-dir';
  begin
    Path := '';

    Reg := TRegistry.Create;
      try Reg.RootKey := HKEY_CURRENT_USER;

          if Reg.OpenKey('Software\meinprog', False) then
          begin // wenn der Schlüssel geöffnet werden kann (ohne ihn vorher anzulegen), dann:

          // gib mir über i den Pfad
          case i of // 1-4: nur wenn ein Schlüssel existiert wird er gelesen
          1: if Reg.ValueExists(wk + 'start.ini') then Path := Reg.ReadString(wk + 'start.ini');
          2: if Reg.ValueExists(wk) then Path := Reg.ReadString(wk);
          3: if Reg.ValueExists(wk + 'button_1.ini') then Path := Reg.ReadString(wk + 'button_1.ini');
          4: if Reg.ValueExists(wk + 'button_2.ini') then Path := Reg.ReadString(wk + 'button_2.ini');
          end;

          Reg.CloseKey; // Schlüssel schließen, da er geöffnet wurde
          end;

      finally Reg.Free; // Reg freigeben
      end;

    Result := Path;
  end;

mumu 26. Apr 2005 12:02

Re: Kann Registry-Werte nicht auslesen!
 
schau mal was für zugriffsrechte du hast

Reg := TRegistry.Create;
Reg.Access = ?


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