AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Win32/Win64 API (native code) Delphi Datei ausführen unter Windows 64-Bit
Thema durchsuchen
Ansicht
Themen-Optionen

Datei ausführen unter Windows 64-Bit

Ein Thema von Rakshasa · begonnen am 18. Feb 2007 · letzter Beitrag vom 2. Apr 2007
Antwort Antwort
Seite 2 von 2     12   
Benutzerbild von Rakshasa
Rakshasa

Registriert seit: 1. Nov 2003
182 Beiträge
 
Delphi 2007 Professional
 
#11

Re: Datei ausführen unter Windows 64-Bit

  Alt 2. Apr 2007, 14:25
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ß!
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 2     12   


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 03:04 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz