Einzelnen Beitrag anzeigen

Benutzerbild von TKC
TKC

Registriert seit: 21. Apr 2004
Ort: Tuningen
367 Beiträge
 
Delphi XE2 Enterprise
 
#5

Re: FileExists und Vista 64 Bit funktioniert nicht ?

  Alt 10. Jan 2009, 03:57
So ... ich habe es jetzt mal so gelöst ...

Delphi-Quellcode:
function FileExists64NoRedirection(Filename: string): Boolean;
type
  TWow64DisableWow64FsRedirection = function(var Wow64FsEnableRedirection: LongBool): LongBool; StdCall;
  TWow64RevertWow64FsRedirection = function(var Wow64FsEnableRedirection: LongBool): LongBool; StdCall;

var
  hHandle: THandle;
  Wow64DisableWow64FsRedirection: TWow64DisableWow64FsRedirection;
  Wow64RevertWow64FsRedirection: TWow64RevertWow64FsRedirection;
  Wow64FsEnableRedirection: LongBool;
  Is64BitWin: boolean;

begin
  Is64BitWin := False;
  Wow64DisableWow64FsRedirection := nil;
  Wow64RevertWow64FsRedirection := nil;

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


    if ((hHandle <> 0) and (@Wow64RevertWow64FsRedirection <> nil) and (@Wow64DisableWow64FsRedirection <> nil)) then
      Is64BitWin := True;

  except
    Is64BitWin := False;
  end;

  if Is64BitWin then
    begin
      Wow64DisableWow64FsRedirection(Wow64FsEnableRedirection);
      Result := FileExists(Filename);
      Wow64RevertWow64FsRedirection(Wow64FsEnableRedirection);
    end
  else
    Result := FileExists(Filename);

end;
Es liegt wohl an der "File system redirection" von 64 Bit Systemen, die im System32 Ordner und anderen aktiv ist.

Aber irgendwie denke ich, das CG das mal etwas anpassen sollte.
Ich bin noch für andere Lösungen offen.
  Mit Zitat antworten Zitat