Entwickler-Ecke
Dateizugriff - Gleiche Schlüssel für 2 unterschiedliche Registrypfade!?
CeeJay D-Magic - So 31.07.11 22:14
Titel: Gleiche Schlüssel für 2 unterschiedliche Registrypfade!?
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 - 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 - So 31.07.11 23:19
Und wie kann ich das umgehen?
jaenicke - Mo 01.08.11 06:59
Dafür gibt es API-Funktionen wie Wow64DisableWow64FsRedirection, die die Umleitung auf Dateiebene ausschalten:
http://msdn.microsoft.com/en-us/library/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.
jaenicke - 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 - 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 - Mo 01.08.11 19:07
Dann deklariere es dir doch selbst als Konstante. :zwinker:
CeeJay D-Magic - Mo 01.08.11 21:40
Ai des ma Idee XD
Danke für deine Hilfe,
MfG,
Cee
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2025 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!