Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Windows 7 x64 - FileExist fehler (https://www.delphipraxis.net/134417-windows-7-x64-fileexist-fehler.html)

Sereby 21. Mai 2009 21:05


Windows 7 x64 - FileExist fehler
 
Hiho,

ich musste leider eben feststellen, dass unter Windows 7 x64 ein blöder Bug existiert mit Delphi Programmen die die FileExist Funktion benutzen
wenn ich versuche folgenden einfachen Befehl auszuführen:
Code:
if FileExists('C:\Windows\system32\java.exe') then
  Showmessage('Jupp')
else
  Showmessage('Blah');
Die Datei Existiert 100000% aber die Funktion liefert IMMER False zurück.
Kennt da jemand ne lösung?

ExtraInfos:
- Ich habe UAC auch deaktiviert -> selbes Problem
- Das Programm wurde mit Delphi 2009 erstellt
- Auch wenn ich das Programm mit Admin-Rechten starte kommt dabei False raus!

Fridolin Walther 21. Mai 2009 21:11

Re: Windows 7 x64 - FileExist fehler
 
Das ist kein Bug, sondern ein Feature. Wenn Deine Win32 Applikation auf \Windows\System32 zugreifst, landen Deine Zugriff nicht in System32 sondern in SysWOW64. Nähere Details inkl. einer Möglichkeit als Anwendung diese Virtualisierung abzuschalten, gibts ebenfalls auf der oben verlinkten Seite.

Sereby 21. Mai 2009 21:48

Re: Windows 7 x64 - FileExist fehler
 
dankeschön :)
so müsste man immer hilfe erhalten können :D
sehr schnell und kompetent! danke!

mkinzler 22. Mai 2009 05:35

Re: Windows 7 x64 - FileExist fehler
 
Das Selbe gilt für WinXP x64, Windows Server 2003 x64 und Vista x64

xZise 22. Mai 2009 09:30

Re: Windows 7 x64 - FileExist fehler
 
Aber da stellt sich mir jetzt die Frage, wie ich dann dennoch an den x64 system32 (was für ein geiler Name ^^ ) komme?

MfG
xZise

mkinzler 22. Mai 2009 09:31

Re: Windows 7 x64 - FileExist fehler
 
Der wird nicht verwendet

Meflin 22. Mai 2009 09:45

Re: Windows 7 x64 - FileExist fehler
 
Zitat:

Zitat von mkinzler
Der wird nicht verwendet

Natürlich wird der verwendet... Ein kleiner Eintrag in der hosts, und der wird auch wirksam... Also eindeutig: Wird verwendet.

hoika 22. Mai 2009 09:53

Re: Windows 7 x64 - FileExist fehler
 
Hallo,

Zitat:

Aber da stellt sich mir jetzt die Frage, wie ich dann dennoch an den x64 system32 (was für ein geiler Name ^^ ) komme?
steht doch im Link drin, zumindestens ab Vista.

(%windir%\Sysnative)


Heiko

Fridolin Walther 22. Mai 2009 12:28

Re: Windows 7 x64 - FileExist fehler
 
Da einige zu faul sind sich den von mir verlinkten MSDN Artikel anzuschauen, hier nochmal die Infos zusammengefasst:

Als Win32 Anwendung werden auf einem x64 System (egal ob XP, 2003, Vista, 2008, 7) alle Zugriffe auf %windir%\system32 nach %windir%\syswow64 umgeleitet. Ausgenommen davon sind folgende Unterverzeichnisse von %windir%\system32:

%windir%\system32\catroot
%windir%\system32\catroot2
%windir%\system32\drivers\etc
%windir%\system32\logfiles
%windir%\system32\spool

Darüber hinaus gibt es zwei Methoden um als Win32 Anwendung an das "richtige" System32 Verzeichnis zu gelangen. Ab Windows Vista gibt es zum einen den virtuellen Ordner %windir%\sysnative. Falls eine Anwendung auf diesen Ordner zugreift, landet es automatisch im nativen System32 Ordner. Diese Methode funktioniert aber erst ab Windows Vista. Ab Windows XP dagegen funktioniert die API MSDN-Library durchsuchenWow64DisableWow64FsRedirection. Mit dieser API kann ein Thread (!!) die Dateisystemvirtualisierung für sich selbst abschalten. Danach landen also alle Zugriffe auf %windir%\system32 auch wirklich dort.

Hoffe damit alle Unklarheiten beseitigt zu haben.


Alle Zeitangaben in WEZ +1. Es ist jetzt 20:58 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