![]() |
Delphi-Version: 2007
FileExists liefert False, obwohl die Datei vorhanden ist
Hallo,
ich verwende Delphi 2007 Pro auf 2 Windows 7-Installationen, einmal mit 32 und einmal mit 64 Bit. Nun muss ich prüfen, ob die Datei: C:\Windows\system32\WinSAT.exe vorhanden ist (dabei handelt es sich um das Systembewertungstool). Mein Programm wird mit Admin-Rechten gestartet. Die Verwendung von FileExists liefert nun beim 32 Bit-System True, beim 64 Bit-System False. Die Datei WinSAT.exe existiert jeweils in beiden Windows-Installationen im entsprechenden Verzeichnis (das meint der Windows-Explorer und der TotalCommander). Woran kann es liegen, dass FileExists in der 64 Bit-Windows-Installation False zurückliefert? Was kann man machen? Danke für die Hilfe. |
AW: FileExists liefert False, obwohl die Datei vorhanden ist
Hi!
Da schlägt bestimmt die Dateisystem-Virtualisierung zu. Schau mal, ob du unter dem Stichwort was findest. Liebe Grüße, Fredric |
AW: FileExists liefert False, obwohl die Datei vorhanden ist
In Win64 wird die Dateisystemvirtualisierung zuschlagen und dein Programm auf ein anderes Verzeichnis zuschlagen.
Prüf einfach mal mit GetFileAttributes (und eventuell noch mit FindFirstFile), ob und welchen Fehlercode (GetLastError) du zurückbekommst. Irgendwo im Forum sollte auch schon geschrieben stehen, wie man diese Virtualisierung abschlaten kann (mit 'nem passenden Manifest z.B.) |
AW: FileExists liefert False, obwohl die Datei vorhanden ist
Da deine Anwendung immer 32 bit ist (jaja bei delphi ist das einfach ^^) läuft sie unter 64bit Systemen in der WOW64 emulation.
Guck mal in dem 64bit System, ob sich die Datei unter "C:\Windows\SysWOW64\WinSAT.exe" befindet. Wenn ja ist die Lösung einfach: Prüfe ob du dich auf einem 32 oder auf einem 64 bit System befindest. Falls 64 bittig, im syswow64 Ordner gucken statt in system32 |
AW: FileExists liefert False, obwohl die Datei vorhanden ist
Zitat:
Ideal wäre es, wenn man die Virtualisierung temporär für mein Programm abschalten könnte. Ich habe mein Manifest deswegen hier mal gepostet. Möglicherweise ist nur eine kleine Änderung nötig.
Delphi-Quellcode:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0"> <assemblyIdentity name="ProjectName" processorArchitecture="*" version="1.0.0.0" type="win32"/> <description>Windows Shell</description> <dependency> <dependentAssembly> <assemblyIdentity type="win32" name="Microsoft.Windows.Common-Controls" version="6.0.0.0" processorArchitecture="*" publicKeyToken="6595b64144ccf1df" language="*" /> </dependentAssembly> </dependency> <trustInfo xmlns="urn:schemas-microsoft-com:asm.v2"> <security> <requestedPrivileges> <requestedExecutionLevel level="requireAdministrator" uiAccess="false"/> </requestedPrivileges> </security> </trustInfo> </assembly> |
AW: FileExists liefert False, obwohl die Datei vorhanden ist
Zitat:
|
AW: FileExists liefert False, obwohl die Datei vorhanden ist
Versuch mal C:\Windows\Sysnative\WinSAT.exe
|
AW: FileExists liefert False, obwohl die Datei vorhanden ist
Zitat:
Hmmm ... grad geguckt, das macht doch keinen Unterschied. :? |
AW: FileExists liefert False, obwohl die Datei vorhanden ist
Zitat:
Zitat:
Mittlerweile habe ich im Embarcadero-Forum ( ![]() Edit: Und zwar liefert die MSDN ( ![]() 32-bit applications can access the native system directory by substituting %windir%\Sysnative for %windir%\System32. WOW64 recognizes Sysnative as a special alias used to indicate that the file system should not redirect the access. This mechanism is flexible and easy to use, therefore, it is the recommended mechanism to bypass file system redirection. Note that 64-bit applications cannot use the Sysnative alias as it is a virtual directory not a real one. Das bedeutet, dass ich unter 64 Bit-Windows-Versionen anstatt auf C:\Windows\system32\WinSAT.exe nun auf C:\Windows\Sysnative\WinSAT.exe zugreifen muss. Abschließend noch die Frage, ob dieses Verhalten auch bei Vista x64 zutrifft? |
AW: FileExists liefert False, obwohl die Datei vorhanden ist
Ja, bei allen 64bit Windows.
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 19:07 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