![]() |
Innosetup: Verständnisfrage zur Registry (HKCU)
Hallo!
Ich habe ein Setup, das unter HKCU\Software ein paar Schlüssel anlegt. Da das Setup dann als Administrator ausgeführt wird, landen die Schlüssel logischerweise im HKCU-Zweig vom Admin-Konto. Soweit klar. Ziel soll aber sein, dass jedes Benutzerkonto seine eigenen Programmeinstellungen bekommt, also jeweils einen HKCU-Zweig. Was ich nicht verstehe ist, wie andere Installer verfahren wenn man dort auswählt "Für alle Benutzer einrichten". Wird dann dort alles in den HKLM-Zweig geschrieben und das eigentliche Programm "klont" die Einstellungen dann in den jeweiligen HKCU-Zweig? Oder wie muss man sich das vorstellen? Grüße Cody |
AW: Innosetup: Verständnisfrage zur Registry (HKCU)
Ich weiß nicht, wie andere das machen, aber eine Möglichkeit wäre: nach den Einstellungen in HKCU suchen und wenn gefunden, diese benutzen, ansonsten deren Pendants aus HKLM. So hat jeder Benutzer die gleichen Vorgabewerte, kann diese aber nach eigenem Gusto ändern.
|
AW: Innosetup: Verständnisfrage zur Registry (HKCU)
Wie sind eigentlich nach heutiger Lesart (Vista und höher) die "Gepflogenheiten" im HKCU-Zweig? Darf man da mit einer Anwendung die nicht im Admin-Kontext läuft nach Herzenslust drin rum schreiben?
|
AW: Innosetup: Verständnisfrage zur Registry (HKCU)
Ja. Wenn man nicht mit einem Guest-Account arbeitet.
|
AW: Innosetup: Verständnisfrage zur Registry (HKCU)
Solange man an die passenden Stellen schreibt, kann man da schreiben wie man möchte, ja. Man sollte allerdings nie voraussetzen, dass man auch überall die Rechte hat, denn die kann man ja jederzeit ändern. Wenn das nicht geht, sollte das daher entsprechend abgefangen werden.
Das automatische Anlegen ist in der Tat ein üblicher Weg. Wenn man Delphi mit einem anderen Profil startet, wird das auch in der Registry entsprechend angelegt, wenn es noch nicht da ist. |
AW: Innosetup: Verständnisfrage zur Registry (HKCU)
Liste der Anhänge anzeigen (Anzahl: 1)
Hmm, jetzt habe ich mal versucht so eine Klonerei zu implementieren. Im Adminkontext funktioniert das auch, die Schlüssel und Werte werden aus HKLM in HKCU geklont falls sie da nicht existieren. Im normalen Userkontext (NICHT Gast sondern Standardbenutzer) dagegen nach wie vor keine Schreiboperation möglich. Ich habe die Unit mal angehängt. Der ganze Zauber findet in ValueExists statt:
Delphi-Quellcode:
function TRegConfig.ValueExists(const AName: string): Boolean;
var HKCU, HKLM: TRegistry; Info: TRegDataInfo; begin Result:= FALSE; try HKCU:= TRegistry.Create(KEY_ALL_ACCESS or KEY_WOW64_64KEY); HKLM:= TRegistry.Create(KEY_READ or KEY_WOW64_64KEY); HKCU.RootKey:= HKEY_CURRENT_USER; HKLM.RootKey:= HKEY_LOCAL_MACHINE; if HKCU.OpenKey(FReg.CurrentPath, TRUE) then begin if HKCU.ValueExists(AName) then begin Result:= TRUE; Exit; end else begin if HKLM.OpenKey(FReg.CurrentPath, FALSE) and HKLM.ValueExists(AName) then begin HKLM.GetDataInfo(AName, Info); case Info.RegData of rdString: HKCU.WriteString(AName, HKLM.ReadString(AName)); rdInteger: HKCU.WriteInteger(AName, HKLM.ReadInteger(AName)); end; Result:= TRUE; end; end; end; finally FreeAndNil(HKCU); FreeAndNil(HKLM); end; end; |
AW: Innosetup: Verständnisfrage zur Registry (HKCU)
Kleine Frage am Rande, vielleicht bringt das auch die andere Frage nach "Installation für alle" etwas weiter:
Wie steht es heutzutage eigentlich mit der ![]()
In der Praxis kann ich das nicht nachvollziehen. Hatte das nur unter Windows Vista Bestand? Das einzige was ich beobachten kann, ist das ein Ausführen im Kompatiblitätsmodus bewirkt, dass das Öffnen eines Schlüssels in HKLM\Software zwar genehmnigt wird, wenn man Schreibrechte anfordert, aber letztendlich fehlschlägt, wenn man tatsächlich etwas schreiben möchte. |
AW: Innosetup: Verständnisfrage zur Registry (HKCU)
Zitat:
Denn gedacht ist diese für alte Programme, die vor XP entstanden sind. |
AW: Innosetup: Verständnisfrage zur Registry (HKCU)
Alter Schwede, genau das war es! Vielen Dank! :thumb:
|
AW: Innosetup: Verständnisfrage zur Registry (HKCU)
Unabhängig von dem eigentlichen Problem ist mir gestern Abend noch ein weiteres eingefallen: Wenn ich diese Klonerei von HKLM nach HKCU betreibe, dann kann der Uninstaller am Ende die Registry nicht vollständig bereinigen. Woher soll der denn auch wissen was da später noch geklont wurde? Außerdem hätte der ja das selbe Problem wie der Installer, nämlich gar nicht an die HKCU aller Konten heran zu kommen.
Also irgendwo mach ich da noch einen grundsätzlichen Denkfehler... |
Alle Zeitangaben in WEZ +1. Es ist jetzt 15:53 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