Delphi-PRAXiS
Seite 2 von 2     12   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   Delphi Datei ausführen unter Windows 64-Bit (https://www.delphipraxis.net/86723-datei-ausfuehren-unter-windows-64-bit.html)

Rakshasa 2. Apr 2007 13:25

Re: Datei ausführen unter Windows 64-Bit
 
Wie ich jetzt endlich mal herausgefunden habe, führt der bisherherige Code dazu, dass (zumindest unter Vista 64-Bit) ein extrem seltsamer Fehler auftritt: Dialoge (showmessage(), showtaskmessage(), TaskDialog() etc.) werden teilweise einfach nicht angezeigt. Es tritt allerdings keine Exception auf o.ä., der Code des Dialogs wird einfach "übersprungen"; der Fehler ist auch nicht immer direkt reproduzierbar, sonder tritt teilweise sporadisch auf.

Lösung:

Ein winziger Fehler im Code, nämlich ein fehlendes "var"...
Hier jetzt ein Code, der zumindest bei mir funktioniert, benötigt wird evtl. noch eine Function, die true oder false zurückgibt, sofern ein Win64-Betriebssystem vorliegt: Is64Bit().


Code:
Function ChangeFSRedirection(bDisable: Boolean): Boolean;

 Type TWow64DisableWow64FsRedirection = Function(Var Wow64FsEnableRedirection: LongBool): LongBool; StdCall;
      TWow64EnableWow64FsRedirection = Function(var Wow64FsEnableRedirection: LongBool): LongBool; StdCall;

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

begin


Result := true;
if not Is64Bit then exit; // Kein 64-Bit-Win? 

 try
    hHandle := GetModuleHandle('kernel32.dll');
    @Wow64EnableWow64FsRedirection := GetProcAddress(hHandle, 'Wow64EnableWow64FsRedirection');
    @Wow64DisableWow64FsRedirection := GetProcAddress(hHandle, 'Wow64DisableWow64FsRedirection');

    if bDisAble then begin
     If ((hHandle <> 0) and (@Wow64EnableWow64FsRedirection <> nil) and (@Wow64DisableWow64FsRedirection <> nil)) Then
      Wow64DisableWow64FsRedirection(Wow64FsEnableRedirection);
    end;

    if not bDisAble then
    If ((hHandle <> 0) and (@Wow64EnableWow64FsRedirection <> nil) and (@Wow64DisableWow64FsRedirection <> nil)) Then
      Wow64EnableWow64FsRedirection(Wow64FsEnableRedirection);

 Except Result := false;
 end;

end;
Die Anwendung kann dann z.B. so erfolgen:

Code:
ChangeFSRedirection(true);
OpenFile('C:\Windows\system32\einedatei.txt');
ChangeFSRedirection(false);
Viel Spaß!


Alle Zeitangaben in WEZ +1. Es ist jetzt 03:28 Uhr.
Seite 2 von 2     12   

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz