AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Schreiben mit TRegistry funktioniert nicht

Ein Thema von freimatz · begonnen am 30. Okt 2020 · letzter Beitrag vom 30. Okt 2020
Antwort Antwort
freimatz

Registriert seit: 20. Mai 2010
1.380 Beiträge
 
Delphi 11 Alexandria
 
#1

Schreiben mit TRegistry funktioniert nicht

  Alt 30. Okt 2020, 10:14
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?
  Mit Zitat antworten Zitat
Benutzerbild von Dalai
Dalai

Registriert seit: 9. Apr 2006
1.680 Beiträge
 
Delphi 5 Professional
 
#2

AW: Schreiben mit TRegistry funktioniert nicht

  Alt 30. Okt 2020, 10:18
Ist dein Kompilat 32-bit? Wenn ja, dann schau mal in HKLM\Software\Wow6432Node\Microsoft\....

Grüße
Dalai
  Mit Zitat antworten Zitat
Der schöne Günther

Registriert seit: 6. Mär 2013
6.110 Beiträge
 
Delphi 10 Seattle Enterprise
 
#3

AW: Schreiben mit TRegistry funktioniert nicht

  Alt 30. Okt 2020, 10:42
Lesestoff bei der Gelegenheit:

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

https://docs.microsoft.com/en-us/win...virtualization
  Mit Zitat antworten Zitat
freimatz

Registriert seit: 20. Mai 2010
1.380 Beiträge
 
Delphi 11 Alexandria
 
#4

AW: Schreiben mit TRegistry funktioniert nicht

  Alt 30. Okt 2020, 10:42
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.
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe

Registriert seit: 20. Jan 2006
Ort: Lübbecke
11.007 Beiträge
 
Delphi 12 Athens
 
#5

AW: Schreiben mit TRegistry funktioniert nicht

  Alt 30. Okt 2020, 10:46
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.');
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 04:42 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