Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Werkzeuge (https://www.delphipraxis.net/63-sonstige-werkzeuge/)
-   -   InnoSetup liest Registry-Wert nicht (https://www.delphipraxis.net/208167-innosetup-liest-registry-wert-nicht.html)

greenmile 21. Jun 2021 10:04

InnoSetup liest Registry-Wert nicht
 
Hallo,

bin etwas am verzweifeln. Ich möchte prüfen, ob die Edge-Runtime installiert ist. Delphi klappt das:

Code:
  aRegistry := TRegistry.Create(KEY_QUERY_VALUE);
  aRegistry.RootKey := HKEY_LOCAL_MACHINE;
  aRegistry.OpenKey('\SOFTWARE\WOW6432Node\Microsoft\EdgeUpdate\Clients\{F3C4FE00-EFD5-403B-9569-398A20F1BA4A}',false);
  Temp := aRegistry.ReadString('pv');
  aRegistry.Free;
Temp enthält den Inhalt von 'pv'. Mit InnoSetup klappt das nicht, Ergebnis ist leer, obwohl ich sogar in SysWOW schaue

Code:
  If not RegQueryStringValue(HKEY_LOCAL_MACHINE,'\SOFTWARE\WOW6432Node\Microsoft\EdgeUpdate\Clients\{F3C4FE00-EFD5-403B-9569-398A20F1BA4A}','pv', Temp) then
    RegQueryStringValue(HKEY_LOCAL_MACHINE,'\SOFTWARE\Microsoft\EdgeUpdate\Clients\{F3C4FE00-EFD5-403B-9569-398A20F1BA4A}','pv', Temp);
... und ich komme einfahc nicht drauf, wieso. Hat jemand einen Tipp für mich?

TiGü 21. Jun 2021 11:17

AW: InnoSetup liest Registry-Wert nicht
 
Läuft dein Delphi-Programm mit den gleichen Rechten wie das InnoSetup?
Ein "Als Administrator starten..." in denn Raum geworfen.
Setups haben ja die Angewohnheit, mit erhöhten Rechten gestartet zu werden (müssen).
Vielleicht "sieht" der ausführende User den Zweig gar nicht?

Gehe im Registry-Baum ein paar Ebenen nach oben und lass dir ausgeben, was die RegQueryStringValue lesen kann.

greenmile 21. Jun 2021 11:22

AW: InnoSetup liest Registry-Wert nicht
 
Hi,

Zitat:

Zitat von TiGü (Beitrag 1491290)
Läuft dein Delphi-Programm mit den gleichen Rechten wie das InnoSetup?
Ein "Als Administrator starten..." in denn Raum geworfen.
Setups haben ja die Angewohnheit, mit erhöhten Rechten gestartet zu werden (müssen).
Vielleicht "sieht" der ausführende User den Zweig gar nicht?

Ja, habe es mit denselben Rechten und auch in Delphi mit den Registry-Rechten (nur lesen) ausgeführt.

Dalai 21. Jun 2021 16:09

AW: InnoSetup liest Registry-Wert nicht
 
Ist das (Inno)Setup 32-bit? Falls ja, nützt das Wow6432Node gar nichts bzw. ist sogar schädlich, weil dann aus Sicht des OS in HKLM\Software\Wow6432Node\Wow6432Node\... geschaut wird. Es wäre sowieso besser, auf Wow6432Node zu verzichten und stattdessen die passenden Flags zum Öffnen des Schlüssels (MSDN-Library durchsuchenKEY_WOW64_64KEY bzw. MSDN-Library durchsuchenKEY_WOW64_32KEY) zu benutzen, sofern nötig.

Grüße
Dalai

greenmile 21. Jun 2021 18:11

AW: InnoSetup liest Registry-Wert nicht
 
Zitat:

Zitat von Dalai (Beitrag 1491313)
Ist das (Inno)Setup 32-bit? Falls ja, nützt das Wow6432Node gar nichts bzw. ist sogar schädlich, weil dann aus Sicht des OS in HKLM\Software\Wow6432Node\Wow6432Node\... geschaut wird. Es wäre sowieso besser, auf Wow6432Node zu verzichten und stattdessen die passenden Flags zum Öffnen des Schlüssels (MSDN-Library durchsuchenKEY_WOW64_64KEY bzw. MSDN-Library durchsuchenKEY_WOW64_32KEY) zu benutzen, sofern nötig.

Grüße
Dalai

KEY_WOW64_32KEY gibt es im InnoSetup nicht, kannst nur mit HKLM32 bzw HKLM64 öffnen und egal was ich wähle, also HKLM32, HKLM64, mit SysWOW, ohne ... Es kommt nie ein Wert. Setup als Admin, ohne Admin, völlig wumpe. Und das will mir nicht in den Kopf, wieso ...?

Dalai 21. Jun 2021 18:32

AW: InnoSetup liest Registry-Wert nicht
 
Schau mal mit Process Monitor nach, in welchem Zweig wirklich gelesen wird, und prüfe, ob das mit deinen Erwartungen übereinstimmt und ob das Lesen erfolgreich ist.

Grüße
Dalai

greenmile 22. Jun 2021 09:05

AW: InnoSetup liest Registry-Wert nicht
 
Peinlich peinlich, habe den Fehler gefunden. Nachdem ProcMon keinen Zugriff auf die Registry getrackt hat, habe ich mir den String angeschaut und siehe da ... Es war der führende Backslash.

Geht es in Delphi so

Code:
'\SOFTWARE\Microsoft\EdgeUpdate\...'
muss es im InnoSetup so ohne \ am Anfang erfolgen:

Code:
'SOFTWARE\Microsoft\EdgeUpdate\...'
Und schon klappt es.

Dalai 22. Jun 2021 12:27

AW: InnoSetup liest Registry-Wert nicht
 
Interessanter Fall :). Im Delphi geht es sowohl mit als auch ohne führenden Backslash.

Grüße
Dalai

Uwe Raabe 22. Jun 2021 13:20

AW: InnoSetup liest Registry-Wert nicht
 
Delphi erlaubt halt auch relative Keys (relativ zu CurrentKey/CurrentPath). Der Backslash am Anfang signalisiert dann einen absoluten Key. Das Weglassen funktioniert nur wenn CurrentPath leer ist. Intern wird der führende Backslash immer entfernt.


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