Einzelnen Beitrag anzeigen

Achim Kalwa

Registriert seit: 2. Apr 2005
Ort: Lienen
103 Beiträge
 
Delphi 11 Alexandria
 
#3

Re: Win7 64Bit und Dateiendungverknüpfung von XP

  Alt 18. Apr 2010, 13:03
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
Achim
  Mit Zitat antworten Zitat