![]() |
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; |
Re: Kann Registry-Werte nicht auslesen!
Zitat:
|
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. |
Re: Kann Registry-Werte nicht auslesen!
Hallo!
Ja, die Einträge existrieren! Aber was meinst Du mit "benutzer-bezogen"? |
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. |
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. |
Re: Kann Registry-Werte nicht auslesen!
Zitat:
|
Re: Kann Registry-Werte nicht auslesen!
Oder:
Delphi-Quellcode:
reg := TRegistry.Create(KEY_READ);
|
Re: Kann Registry-Werte nicht auslesen!
Hallo!
Jetzt habe ich dort folgendes stehen:
Delphi-Quellcode:
Es wird mir auch gesagt, dass der Schlüssel existiert. Nur der Wert "work-dir" wird nicht gelesen.
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; Gruß MAx666 |
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? |
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; |
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; |
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