![]() |
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:
Die Anwendung kann dann z.B. so erfolgen:
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;
Code:
Viel Spaß!
ChangeFSRedirection(true);
OpenFile('C:\Windows\system32\einedatei.txt'); ChangeFSRedirection(false); |
Alle Zeitangaben in WEZ +1. Es ist jetzt 03:28 Uhr. |
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