Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Schreiben mit TRegistry funktioniert nicht (https://www.delphipraxis.net/205919-schreiben-mit-tregistry-funktioniert-nicht.html)

freimatz 30. Okt 2020 10:14

Schreiben mit TRegistry funktioniert nicht
 
Hallo zusammen,
ich möchte in die Registry schreiben und zwar in den Pfad 'Computer\HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Wi ndows\CurrentVersion\Uninstall'.

Inzwischen habe ich es geschafft mein Programm mit Adminstratoren zu starten, aber wenn ich mit regedit schaue steht da nichts drin.
Hier mein aktueller Testcode:
Delphi-Quellcode:
procedure CreateUninstaller(const AGuid, AExe, AVersion, AInstallDate, AUninstallString: String);
const rootkey = 'SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall';
var
  reg: TRegistry; key: String;
begin
  reg := TRegistry.Create;
  try
    reg.RootKey := HKEY_LOCAL_MACHINE;
    reg.Access := KEY_WRITE;

    if not reg.OpenKey(rootkey, True)
    then raise EInvalidOpException.Create('Uninstall registry key not found.');

    key := rootkey + '\' + AGuid;

    if not reg.CreateKey(key)
    then raise EInvalidOpException.Create('Cannot create uninstall registry key.');

    if not reg.OpenKey(key, True)
    then raise EInvalidOpException.Create('Uninstall key not found.');

    reg.WriteString('UninstallString', AUninstallString); //exe + " / uninstallprompt ");
In der letzten Zeile ist laut Debugger reg.FCurrentPath wie folgt: 'SOFTWARE\Microsoft\Windows\CurrentVersion\Uninsta ll\SOFTWARE\Microsoft\Windows\CurrentVersion\Unins tall\{61EF0826-A2B7-4EA7-AB55-C828D8D79985}'

Wenn ich dann mit regedit schaue gibt es unter den key 'Computer\HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Wi ndows\CurrentVersion\Uninstall' keinen Eintrag mit '{61EF0826-A2B7-4EA7-AB55-C828D8D79985}'.
Bei dem reg.WriteString kommt aber auch keine exception.
Habe ich ein Brett vor dem Kopf?

Dalai 30. Okt 2020 10:18

AW: Schreiben mit TRegistry funktioniert nicht
 
Ist dein Kompilat 32-bit? Wenn ja, dann schau mal in HKLM\Software\Wow6432Node\Microsoft\....

Grüße
Dalai

Der schöne Günther 30. Okt 2020 10:42

AW: Schreiben mit TRegistry funktioniert nicht
 
Lesestoff bei der Gelegenheit:

https://docs.microsoft.com/en-us/win...n-the-registry

https://docs.microsoft.com/en-us/win...virtualization

freimatz 30. Okt 2020 10:42

AW: Schreiben mit TRegistry funktioniert nicht
 
Ja ist 32-Bit. Danke für den Hinweis. Da gibt es tatsächlich ein '{61EF0826-A2B7-4EA7-AB55-C828D8D79985}'.

Und mit KEY_WOW64_64KEY ist es dann auch am von mir gewünschten Ort. :thumb:

Uwe Raabe 30. Okt 2020 10:46

AW: Schreiben mit TRegistry funktioniert nicht
 
Aus der Hilfe für TRegistry.CreateKey:

Zitat:

Mit CreateKey wird ein neuer Schlüssel in die Registrierung eingefügt. Key gibt den Namen des neuen Schlüssels an. Key kann ein absoluter oder ein relativer Schlüsselname sein. Ein absoluter Schlüssel beginnt mit einem Backslash und setzt direkt auf den Hauptschlüssel auf. Ein relativer Schlüssel ist ein Unterschlüssel des aktuellen.
Delphi-Quellcode:
    if not reg.OpenKey(rootkey, True)
    then raise EInvalidOpException.Create('Uninstall registry key not found.');

    key := rootkey + '\' + AGuid;

    if not reg.CreateKey(key)
    then raise EInvalidOpException.Create('Cannot create uninstall registry key.');
Nach dem OpenKey ist der aktuelle Schlüssel auf rootkey gesetzt. Da rootkey aber ein relativer Schlüssel ist, wird bei dem CreateKey der doppelte rootkey-Schlüssel verwendet.

Richtig wäre:
Delphi-Quellcode:
    if not reg.OpenKey(rootkey, True)
    then raise EInvalidOpException.Create('Uninstall registry key not found.');

    key := AGuid;

    if not reg.CreateKey(key)
    then raise EInvalidOpException.Create('Cannot create uninstall registry key.');


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