Hallo Martin,
versuche mal folgendes:
Delphi-Quellcode:
const
KEY_WOW64_64KEY = $0100;
KEY_WOW64_32KEY = $0200;
procedure TForm1.addClick(Sender: TObject);
var
Reg:TRegistry;
begin
reg:=tregistry.create(KEY_WOW64_64KEY); // Zugriff auf den 64-Bit-Teil der Registry
Reg.RootKey:=HKEY_CLASSES_ROOT;
...
Besser noch in Verbindung mit einem vorherigen Aufruf von IsWow64Process() aus kernel32.dll:
Delphi-Quellcode:
function IsWow64: Boolean;
type
TIsWow64Process =
function(
// Type of IsWow64Process API fn
Handle: Windows.THandle;
var Res: Windows.BOOL
): Windows.BOOL;
stdcall;
var
IsWow64Result: Windows.BOOL;
// Result from IsWow64Process
IsWow64Process: TIsWow64Process;
// IsWow64Process fn reference
begin
// Try to load required function from kernel32
IsWow64Process :=
Windows.GetProcAddress(Windows.GetModuleHandle('
kernel32'), '
IsWow64Process');
if Assigned(IsWow64Process)
then
begin
// Function is implemented: call it
if not IsWow64Process(Windows.GetCurrentProcess, IsWow64Result)
then
raise Exception.Create('
IsWow64: bad process handle');
Result := IsWow64Result;
// Return result of function
end
else
// Function not implemented: can't be running on Wow64
Result := False;
end;
Dennoch bleibt die Erfordernis, Deine Anwendung mit Admin-Rechten auszuführen, damit Deine Änderungen in der Registry gespeichert werden können.
Meine Empfehlung: Verlagere die Registrierung Deiner Anwendung in das Setup-Programm (z.B. Inno Setup;
http://www.jrsoftware.org/isinfo.php)
Oder teste in Deinem Programm, ob Änderungen in der Registry erforderlich sind. Im Bedarfsfall starte die Anwendung erneut mit Admin-Rechten (via ShellExecute(nil, 'runas', ...)) und beende die laufende Instanz.
HTH
Achim