Zitat von
himitsu:
zwar kein alter C-ler, aber dennoch ein grober Versuch?
........
Die (aufgehobene) Umleitung sollte doch wohl auch auf ShellExecute eine Auswirkung haben.
[add] ungetestet!
Hallo,
besten Dank Himitsu, es hat super geklappt!!!
(Bis auf eine kleine Änderung: Du hast
Wow64RevertWow64FsRedirection(Wow64FsEnableRedirection);
geschrieben; ich hab das zu einem
Wow64EnableWow64FsRedirection(Wow64FsEnableRedirection);
geändert)
Ich habe das Ganze in eine kleine Function gepackt, diese überprüft mittels IsWin64, ob ein 64-Bit-Windows vorliegt oder nicht und führt das dementsprechend dann aus. Habe leider keine Möglichkeit, das auf
Win32 zu testen; vielleicht kann das ja mal jemand machen und hier ein kleines Feedback posten?!
Wenn jemand was Schöneres für isWin64() hat, möge er es ebenfalls posten...
Delphi-Quellcode:
uses ShellApi, Registry, Windows;
Function Wow64DisableWow64FsRedirection(Var Wow64FsEnableRedirection: LongBool): LongBool; StdCall;
External 'Kernel32.dll' Name 'Wow64DisableWow64FsRedirection';
Function Wow64EnableWow64FsRedirection(Wow64FsEnableRedirection: LongBool): LongBool; StdCall;
External 'Kernel32.dll' Name 'Wow64EnableWow64FsRedirection';
Var Wow64FsEnableRedirection: LongBool;
....
Function FileExec(const sDatei: String): Integer;
Function IsWin64: Boolean;
begin
With TRegistry.Create do begin
RootKey := HKEY_LOCAL_MACHINE;
Result := KeyExists('\SOFTWARE\Wow6432Node');
Free;
end;
end;
begin
if isWin64 then begin
If Wow64DisableWow64FsRedirection(Wow64FsEnableRedirection) Then Begin
Result := ShellExecute(0, nil, PChar(sDatei), nil, nil, 0);
Wow64EnableWow64FsRedirection(Wow64FsEnableRedirection);
End else
Result := ShellExecute(0, nil, PChar(sdatei), nil, nil, 0);
end else
Result := ShellExecute(0, nil, PChar(sdatei), nil, nil, 0);
end;