Hallo,
offensichtlich funktionieren die Funktion KeyExists, OpenKeyReadOnly und DeleteKey von TRegistry nicht im Bereich HKLM\SOFTWARE\Microsoft\Windows\ auf Windows 64 Bit-Systemen.
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21:
| var Reg: TRegistry; begin Reg := TRegistry.Create(KEY_ALL_ACCESS OR $0100); Reg.RootKey := HKEY_LOCAL_MACHINE; if Reg.KeyExists('\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\{9DECD0F9-D3E8-48B0-A390-1CF09F54E3A4}') then ShowMessage('Existiert') else begin if Reg.OpenKeyReadOnly('\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\{9DECD0F9-D3E8-48B0-A390-1CF09F54E3A4}') then ShowMessage('Existiert DOCH!') else begin if Reg.OpenKey('\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\{9DECD0F9-D3E8-48B0-A390-1CF09F54E3A4}', false) then ShowMessage('Existiert eben DOCH!'); end; end; if Reg.DeleteKey('\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\{9DECD0F9-D3E8-48B0-A390-1CF09F54E3A4}') then ShowMessage('Erfolg') else ShowMessage('Kein Erfolg'); Reg.Free; end; |
War nur ein ganz einfaches Beispiel, um dies zu testen (Windows 7 64 Bit). Die ID existiert, habe auch diverse andere ausprobiert.
Mit $0100 im TRegistry.Create gebe ich explizit an, dass keine Umleitung in den 32 Bit-Bereich erfolgen soll, was soweit auch funktioniert. Allerdings funktionieren Funktionen wie KeyExists und DeleteKey nicht korrekt.
Vielleicht hat ja jemand eine Idee hierzu. RegDisableReflectionKey hab ich auch schon gefunden, allerdings konnte ich bisher nicht herausfinden, wie dies zu nutzen ist.
EDIT: Beispiel etwas angepasst. KeyExists und OpenKeyReadOnly funktionieren NICHT, OpenKey hingegen schon. Alles mit Adminrechten getestet. Ausgaben sind "Existiert eben doch!" und "Kein Erfolg!".
Danke und Gruß
Andy