Einzelnen Beitrag anzeigen

Benutzerbild von Codehunter
Codehunter

Registriert seit: 3. Jun 2003
Ort: Thüringen
2.272 Beiträge
 
Delphi 10.4 Sydney
 
#6

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