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/)
-   -   Probleme aus HKEY_LOCAL_MACHINE Auszulesen (https://www.delphipraxis.net/163668-probleme-aus-hkey_local_machine-auszulesen.html)

dub89 10. Okt 2011 14:11

Probleme aus HKEY_LOCAL_MACHINE Auszulesen
 
Hallo,

ich habe eine Problem dabei, Daten aus der Registry auszulesen. Im folgenden Code lande ich nach der Zeile regist.OpenKey immer im Else Teil:
Code:
function TRegistryEditor.ReadStringLocalMachine(keyname: string) : string;
  var regist: TRegistry;
  var resultString: string;
  begin
    regist := TRegistry.Create;
    Try
      regist.RootKey := HKEY_LOCAL_MACHINE;
      if regist.OpenKey('SOFTWARE\XYZ\Info', False) then
      begin
        resultString := regist.ReadString(keyname);
      end
      else
      begin
        resultString := '';
      end;
    Finally
      regist.free;
    end;
    Result := resultString;
  end;
Ich hatte das Problem als ich aus HKEY_CURRENT_USER ausgelesen habe noch nicht. In beiden Fälle existiert der Registryschlüssel und die Werte, die ich auslesen möchte existieren auch. Es sind auch immer Strings, die eingetragen sind. Ersetze ich HKEY_LOCAL_MACHINE durch HKEY_CURRENT_USER funktioniert auch wieder alles.

Mit VBA und über die command line komme ich auch auf den Key drauf. Die Probleme existieren sowohl unter WinXP als auch unter Win7 und ich nutze Delphi 2006.

Weiß jemand wo das Problem liegt?

Viele Grüße

Johannes

DeddyH 10. Okt 2011 14:13

AW: Probleme aus HKEY_LOCAL_MACHINE Auszulesen
 
Versuch mal
Delphi-Quellcode:
regist := TRegistry.Create(KEY_READ);
[edit] Achja, ein CloseKey fehlt da auch noch. Mal im Ganzen:
Delphi-Quellcode:
function TRegistryEditor.ReadStringLocalMachine(keyname: string): string;
var
  regist: TRegistry;
begin
  regist := TRegistry.Create(KEY_READ);
  Try
    regist.RootKey := HKEY_LOCAL_MACHINE;
    if regist.OpenKey('SOFTWARE\XYZ\Info', False) then
      try
        Result := regist.ReadString(keyname);
      finally
        regist.CloseKey;
      end
  Finally
    regist.free;
  end;
end;

dub89 10. Okt 2011 14:28

AW: Probleme aus HKEY_LOCAL_MACHINE Auszulesen
 
Vielen Dank es hat so funktioniert!

DeddyH 10. Okt 2011 14:34

AW: Probleme aus HKEY_LOCAL_MACHINE Auszulesen
 
Gern geschehen. Kurz noch zur Erläuterung:
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.
Zitat:

KEY_ALL_ACCESS
Kombination von KEY_READ, KEY_WRITE und KEY_CREATE_LINK.
Als Normaluser hast Du aber im zu untersuchenden Zweig keine Schreibrechte, deshalb schlug Deine Variante fehl.

p80286 12. Okt 2011 12:50

AW: Probleme aus HKEY_LOCAL_MACHINE Auszulesen
 
wie wäre es denn mit dieser Version:

Delphi-Quellcode:
begin
  regist := TRegistry.Create;
  Try
    regist.RootKey := HKEY_LOCAL_MACHINE;
    if regist.OpenKeyReadOnly('SOFTWARE\XYZ\Info') then
Hab ich da bisher (Lese-)Glück gehabt?

Gruß
K-H

DeddyH 12. Okt 2011 12:51

AW: Probleme aus HKEY_LOCAL_MACHINE Auszulesen
 
Zitat:

Anmerkung: Nach einem erfolgreichen Aufruf von OpenKeyReadOnly wird die Eigenschaft Access der Registrierungskomponente automatisch auf KEY_READ gesetzt. Dabei spielt es keine Rolle, welchen Wert diese Eigenschaft vor dem Aufruf der Methode hatte.
Ist also im Prinzip auch nichts anderes, nur später.


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