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/)
-   -   Registry-Eintrag wird nicht gelesen (https://www.delphipraxis.net/204959-registry-eintrag-wird-nicht-gelesen.html)

renew 17. Jul 2020 12:36

Registry-Eintrag wird nicht gelesen
 
Hallo zusammen,

ich habe Probleme bei Auslesen eines Registry-Werts.
Ich schreibe den Wert mittels
Code:
  reg := TRegistry.Create(KEY_WRITE OR KEY_WOW64_64KEY);
[...]
            if reg.OpenKey(FRegistryPath, True) then
            begin
              try
                reg.WriteString(FRegistryKey, keyValue);
              finally
                reg.CloseKey;
              end;
            end;
in die Registry. Der Wert wird auch im RegEditor korrekt angezeigt. Wenn ich aber den Wert auslese, ist das Ergebnis ''.
Code:
    if (reg.KeyExists(FRegistryPath)) then
    begin
      if reg.OpenKey(FRegistryPath, false) then
      begin
        if reg.ValueExists(FRegistryKey) then // => false
        begin
[...]
        end;

[...]
          try
            Result := ReadString(FRegistryKey);  // Leerstring als Ergebnis, obwohl was im Regeditor angezeigt wird
          finally
            reg.CloseKey;
          end;
      end;
    end;
Hat jemand einen Tipp für mich?

Aviator 17. Jul 2020 13:09

AW: Registry-Eintrag wird nicht gelesen
 
Hast du als normaler Benutzer Berechtigungen auf den Registry Schlüssel? Du versucht explizit mit WRITE den Schlüssel zu öffnen. Bei HKEY_LOCAL_MACHINE könnte das problematisch sein. Falls du nicht schreiben sondern nur lesen musst, versuch den Registry Key mal ReadOnly zu öffnen.

renew 17. Jul 2020 13:16

AW: Registry-Eintrag wird nicht gelesen
 
danke, das war's. Hatte schon beim Lesen auf "KEY_READ" umgestellt. Aber ohne Erfolg.
Die Umstellung auf HKEY_CURRENT_USER (statt HKEY_LOCAL_MACHINE) brachte Erfolg.

Edit: Nur komisch, dass ich den Schlüssel-Wert anlegen durfte, aber nicht mehr auslesen.

jaenicke 17. Jul 2020 15:56

AW: Registry-Eintrag wird nicht gelesen
 
Solche Schreibzugriffe werden ggf. in den VirtualStore umgeleitet wie auch Dateizugriffe auf das Programmverzeichnis usw., allerdings dachte ich, dass das nur bei alter Software ohne aktuelles Manifest passiert.

Jedenfalls findest du diese Werte dann unter:
Code:
Computer\HKEY_CURRENT_USER\SOFTWARE\Classes\VirtualStore\MACHINE\SOFTWARE

himitsu 20. Jul 2020 13:09

AW: Registry-Eintrag wird nicht gelesen
 
Bei Software, die sich nicht als Kompatibel mit Windows authentifiziert, und alte Software tut das fast nie, aber auch Neue nicht immer, vor allem wenn die Heuristik das nciht als Neu erkennt.
Und das Manifest von Embarcadero macht das vermutlich nicht.

XML-Code:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">
  ...
  <compatibility xmlns="urn:schemas-microsoft-com:compatibility.v1">
    <application>
      <supportedOS Id="{e2011457-1546-43c5-a5fe-008deee3d3f0}"/><!-- Windows Vista and Windows Server 2008 -->
      <supportedOS Id="{35138b9a-5d96-4fbd-8e2d-a2440225f93a}"/><!-- Windows 7 and Windows Server 2008 R2 -->
      <supportedOS Id="{4a2f28e3-53b9-4441-ba9c-d69d4a4a6e38}"/><!-- Windows 8 and Windows Server 2012 -->
      <supportedOS Id="{1f676c76-80e1-4239-95bb-83d0f6d0da78}"/><!-- Windows 8.1 and Windows Server 2012 R2 -->
      <supportedOS Id="{8e0f7a12-bfb3-4fe8-b9a5-48fd50a15a9a}"/><!-- Windows 10 and Windows Server 2016/2019 -->
    </application>
  </compatibility>
  ...


Alle Zeitangaben in WEZ +2. Es ist jetzt 23:05 Uhr.

Powered by vBulletin® Copyright ©2000 - 2021, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2021 by Daniel R. Wolf