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:
Die Datei Existiert 100000% aber die Funktion liefert IMMER False zurück.
if FileExists('C:\Windows\system32\java.exe') then
Showmessage('Jupp') else Showmessage('Blah'); 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! |
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.
|
Re: Windows 7 x64 - FileExist fehler
dankeschön :)
so müsste man immer hilfe erhalten können :D sehr schnell und kompetent! danke! |
Re: Windows 7 x64 - FileExist fehler
Das Selbe gilt für WinXP x64, Windows Server 2003 x64 und Vista x64
|
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 |
Re: Windows 7 x64 - FileExist fehler
Der wird nicht verwendet
|
Re: Windows 7 x64 - FileExist fehler
Zitat:
|
Re: Windows 7 x64 - FileExist fehler
Hallo,
Zitat:
(%windir%\Sysnative) Heiko |
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 Wow64DisableWow64FsRedirection. 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