Einzelnen Beitrag anzeigen

Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.068 Beiträge
 
Delphi 12 Athens
 
#9

Re: Datei ausführen unter Windows 64-Bit

  Alt 20. Feb 2007, 13:53
Da kernel32.dll in deinen Anwendungen eh immer bereits geladen sein wird, brauchst du ssie nicht nochmals zu laden/freizugeben ^^

FreeLibrary(hHandle); entfällt und hHandle := LoadLibrary('kernel32.dll'); wird durch hHandle := GetModuleHandle('kernel32.dll'); ersetzt.

Dein IsWin64 kannst du eigentlich auch weglassen, denn du fühst die Anwendung ja so oder so aus, selbst wenn Wow64DisableWow64FsRedirection nicht funkioniert.
Außerdem wird Wow64DisableWow64FsRedirection eh nur unter Win64 laufen.
Also kann man auch durch Aufrufen 'ner Win64-Funktion gleich mit auf Win64 testen.

Hier mal eine Kurzfassung deines Codes, wobei hier bei einem fehlgeschalgenem Aufruf mit Wow64FsRedirection nochmal es nochmals ohne versucht wird.
Delphi-Quellcode:
Function FileExec(Const sDatei, sParam: String; iShowCmd: Integer = sw_ShowNormal): Integer;
  Type TWow64DisableWow64FsRedirection = Function(Var Wow64FsEnableRedirection: LongBool): LongBool; StdCall;
    TWow64EnableWow64FsRedirection = Function(Wow64FsEnableRedirection: LongBool): LongBool; StdCall;

  Var hHandle: THandle;
    Wow64DisableWow64FsRedirection: TWow64DisableWow64FsRedirection;
    Wow64EnableWow64FsRedirection: TWow64EnableWow64FsRedirection;
    Wow64FsEnableRedirection: LongBool;

  Begin
    hHandle := GetModuleHandle('kernel32.dll');
    @Wow64EnableWow64FsRedirection := GetProcAddress(hHandle, 'Wow64EnableWow64FsRedirection');
    @Wow64DisableWow64FsRedirection := GetProcAddress(hHandle, 'Wow64DisableWow64FsRedirection');
    If (hHandle <> 0) and (@Wow64EnableWow64FsRedirection <> nil)
      and (@Wow64DisableWow64FsRedirection <> nil) Then
      Wow64DisableWow64FsRedirection(Wow64FsEnableRedirection);
      Result := ShellExecute(0, nil, PChar(sDatei), PChar(sParam), nil, iShowCmd);
      Wow64EnableWow64FsRedirection(Wow64FsEnableRedirection);
    End Else Result := 0;
    Result := Result or ShellExecute(0, nil, PChar(sDatei), PChar(sParam), nil, iShowCmd);
  End;
Neuste Erkenntnis:
Seit Pos einen dritten Parameter hat,
wird PoSex im Delphi viel seltener praktiziert.
  Mit Zitat antworten Zitat