AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Sonstige Fragen zu Delphi Innosetup: Verständnisfrage zur Registry (HKCU)
Thema durchsuchen
Ansicht
Themen-Optionen

Innosetup: Verständnisfrage zur Registry (HKCU)

Ein Thema von Codehunter · begonnen am 3. Mär 2014 · letzter Beitrag vom 4. Mär 2014
Antwort Antwort
Benutzerbild von jaenicke
jaenicke

Registriert seit: 10. Jun 2003
Ort: Berlin
10.056 Beiträge
 
Delphi 12 Athens
 
#1

AW: Innosetup: Verständnisfrage zur Registry (HKCU)

  Alt 3. Mär 2014, 14:07
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.
Sebastian Jänicke
AppCentral
  Mit Zitat antworten Zitat
Benutzerbild von Codehunter
Codehunter

Registriert seit: 3. Jun 2003
Ort: Thüringen
2.291 Beiträge
 
Delphi 12 Athens
 
#2

AW: Innosetup: Verständnisfrage zur Registry (HKCU)

  Alt 3. Mär 2014, 15:05
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;
Angehängte Dateien
Dateityp: pas RegConfig.pas (6,4 KB, 2x aufgerufen)
Ich mache grundsätzlich keine Screenshots. Schießen auf Bildschirme gibt nämlich hässliche Pixelfehler und schadet der Gesundheit vom Kollegen gegenüber. I und E zu vertauschen hätte den selben negativen Effekt, würde aber eher dem Betriebsklima schaden
  Mit Zitat antworten Zitat
Der schöne Günther

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

AW: Innosetup: Verständnisfrage zur Registry (HKCU)

  Alt 3. Mär 2014, 15:49
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 Registry-Virtualisierung? Den verlinkten Artikel würde ich so zusammenfassen:
  • Will jemand ohne Adminrechte in HKLM\Software\ schreiben, wird das nach HKCU\Software\Classes\VirtualStore\ umgeleitet und zugelassen

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.
  Mit Zitat antworten Zitat
Benutzerbild von jaenicke
jaenicke

Registriert seit: 10. Jun 2003
Ort: Berlin
10.056 Beiträge
 
Delphi 12 Athens
 
#4

AW: Innosetup: Verständnisfrage zur Registry (HKCU)

  Alt 3. Mär 2014, 16:12
Wie steht es heutzutage eigentlich mit der Registry-Virtualisierung?
Die greift nur, wenn die Anwendung kein Manifest drin hat, mit der sie bestätigt für XP und höher geeignet zu sein. Wenn die Anwendung ein solches Manifest drin hat, geht Windows davon aus, dass sie auch für die Windowsversion tauglich ist und führt diese Virtualisierung nicht aus.

Denn gedacht ist diese für alte Programme, die vor XP entstanden sind.
Sebastian Jänicke
AppCentral
  Mit Zitat antworten Zitat
Der schöne Günther

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

AW: Innosetup: Verständnisfrage zur Registry (HKCU)

  Alt 3. Mär 2014, 18:54
Alter Schwede, genau das war es! Vielen Dank!
  Mit Zitat antworten Zitat
Benutzerbild von Codehunter
Codehunter

Registriert seit: 3. Jun 2003
Ort: Thüringen
2.291 Beiträge
 
Delphi 12 Athens
 
#6

AW: Innosetup: Verständnisfrage zur Registry (HKCU)

  Alt 4. Mär 2014, 07:27
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...
Ich mache grundsätzlich keine Screenshots. Schießen auf Bildschirme gibt nämlich hässliche Pixelfehler und schadet der Gesundheit vom Kollegen gegenüber. I und E zu vertauschen hätte den selben negativen Effekt, würde aber eher dem Betriebsklima schaden
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.880 Beiträge
 
Delphi 11 Alexandria
 
#7

AW: Innosetup: Verständnisfrage zur Registry (HKCU)

  Alt 4. Mär 2014, 07:50
Ich würde es auch nicht Klonen, sondern im 1. Schritt nur in HKLM schreiben, ändert ein Benutzer eine Einstellungen würde ich diese Änderung dann in HKCU schreiben. Das hat den Vortiel, dass bei einer Änderung der Standard, nicht alle Profile geändert werden müssen und das so einfacher ersichtlich ist, was individuell ist.
Markus Kinzler
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#8

AW: Innosetup: Verständnisfrage zur Registry (HKCU)

  Alt 4. Mär 2014, 12:27
Noch eine Idee: Hinterlege die Standardeinstellungen im Programm. Werden sie geändert, werden sie in der Registry abgelegt. Beim Start wird geguckt, ob die Einstellungen in der Registry gefunden werden. Werden sie gefunden, werden diese geladen, ansonsten die Standardeinstellungen aus dem Programm.
Michael
Ein Teil meines Codes würde euch verunsichern.
  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 12:32 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