Autor |
Beitrag |
CeeJay D-Magic
      
Beiträge: 94
Win XP Prof.
Delphi 7, Lazarus 0.9
|
Verfasst: So 31.07.11 22:14
Ich habe folgendes Problem;
Wenn ich per registry die Schlüssel auslesen will und zwar an 2 unterschiedlichen Stellen, bekomme ich immer die gleichen Schlüssel raus, obwohl bei manueller betrachtung da definitiv unterschiedliche drin sind:
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23:
| UninstallPath32 := 'SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\'; UninstallPath64 := 'SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall\'; reg := TRegistry.Create; reg.RootKey := HKEY_LOCAL_MACHINE; if reg.KeyExists(UninstallPath32) then begin if reg.OpenKeyReadOnly(UninstallPath32) then reg.GetKeyNames(Memo1.Lines); end; reg.CloseKey; reg.free;
reg2 := TRegistry.Create; reg2.RootKey := HKEY_LOCAL_MACHINE; if reg2.KeyExists(UninstallPath64) then begin if reg2.OpenKeyReadOnly(UninstallPath64) then reg2.GetKeyNames(Memo2.Lines); end; reg2.CloseKey; reg2.free; |
Was mache ich da falsch?
MFG,
Cee Moderiert von Narses: Topic aus Sonstiges (Delphi) verschoben am So 31.07.2011 um 22:43
|
|
jaenicke
      
Beiträge: 19312
Erhaltene Danke: 1747
W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: So 31.07.11 23:12
Ein 32-Bit Programm wird unter 64-Bit standardmäßig automatisch auf den 32-Bit Zweig der Registry umgeleitet. Eben auf Wow6432Node. Deshalb greifst du von 32-Bit aus immer auf diesen Pfad zu statt auf den echten.
|
|
CeeJay D-Magic 
      
Beiträge: 94
Win XP Prof.
Delphi 7, Lazarus 0.9
|
Verfasst: So 31.07.11 23:19
Und wie kann ich das umgehen?
|
|
jaenicke
      
Beiträge: 19312
Erhaltene Danke: 1747
W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: Mo 01.08.11 06:59
Dafür gibt es API-Funktionen wie Wow64DisableWow64FsRedirection, die die Umleitung auf Dateiebene ausschalten:
msdn.microsoft.com/e...ibrary/aa365743.aspx
(Ich weiß nicht, ob das auch die Registry beeinflusst.)
Du kannst aber einfach die Zugriffsmodi bei dem Zugriff auf die Registry entsprechend setzen. Dafür gibt es KEY_WOW64_64KEY um immer auf den 64-Bit Schlüssel zuzugreifen und KEY_WOW64_32KEY um immer auf den 32-Bit Schlüssel zuzugreifen.
Und um auf das echte System32 Verzeichnis zuzugreifen, kannst du SysNative benutzen.
Aber du musst ein wenig aufpassen was du wo machst, damit du dir da nicht selbst irgendwo ein Bein stellst, speziell beim Deaktivieren der Umleitungen.
|
|
CeeJay D-Magic 
      
Beiträge: 94
Win XP Prof.
Delphi 7, Lazarus 0.9
|
Verfasst: Mo 01.08.11 12:21
Vielen Dank für deine Hilfe!
Allerdings habe ich keinen Bedarf an den Einstellungen rumzuspielen und habe da nach einer anderen Methode gesucht.
dein hinweis mit der Umleitung hat mich auf diese Hilfen gestoßen:
stackoverflow.com/qu...-on-windows-7-64-bit
stackoverflow.com/qu...indows-7-in-delphi-7
Das komische dabei, wenn man reg := TRegistry.Create(KEY_READ OR $0100); benutzt wird die Umleitung aufgehoben, mit reg.OpenKeyReadOnly wird jedoch das (KEY_READ OR $0100) aufgehoben.
Man kann also nur das reg.OpenKey benutzen.
Hoffe das Hilft allen weiter die es brauchen.
MfG,
Cee
|
|
jaenicke
      
Beiträge: 19312
Erhaltene Danke: 1747
W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: Mo 01.08.11 13:52
CeeJay D-Magic hat folgendes geschrieben : | Man kann also nur das reg.OpenKey benutzen. |
Das ist ein Fehler in TRegistry von Delphi. Wenn man das braucht, muss man das selbst implementieren, dann geht es auch.
Statt z.B. $0100 würde ich allerdings dringend KEY_WOW64_64KEY benutzen, sonst weißt du später nicht mehr was das heißen soll...
|
|
CeeJay D-Magic 
      
Beiträge: 94
Win XP Prof.
Delphi 7, Lazarus 0.9
|
Verfasst: Mo 01.08.11 17:56
Ich habe versucht das KEY_WOW64_64KEY zu benutzen, sagte mir allerdings, das es ein unbekannter befehl sei :/
Aber es geht ja, und mit einem entsprechenden Kommentar passt das schon.
MfG,
Cee
|
|
jaenicke
      
Beiträge: 19312
Erhaltene Danke: 1747
W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: Mo 01.08.11 19:07
Dann deklariere es dir doch selbst als Konstante. 
|
|
CeeJay D-Magic 
      
Beiträge: 94
Win XP Prof.
Delphi 7, Lazarus 0.9
|
Verfasst: Mo 01.08.11 21:40
Ai des ma Idee XD
Danke für deine Hilfe,
MfG,
Cee
|
|