即使文件存在,FileExists()也会返回false

Sev*_*ven 7 delphi delphi-2007 windows-7

我想检查System32目录(Windows 7)中是否存在dll.但即使它存在,FileExists()也会返回false.LoadLibrary返回一个有效的句柄.在这种情况下,我只想检查文件是否存在并可视化此信息.你有任何解决方法吗?

Dav*_*nan 21

很可能这归结为文件重定向.你有一台64位机器但是从32 Delphi进程Windows\system32实际上重定向到Windows\Syswow64.因此,当您认为要求存在文件时Windows\system32,系统实际上会报告文件的存在(或其他)Windows\Syswow64.

如果您确实需要查看真正的64位system32,那么您需要禁用文件重定向.您可以使用该Wow64DisableWow64FsRedirection()功能执行此操作.不要忘记重新打开它Wow64RevertWow64FsRedirection().请注意,禁用重定向器具有广泛的影响,并且可能导致非常奇怪的行为,因此请小心谨慎.

  • 您可以使用特殊的"Sysnative"别名来访问64位System32文件夹而不禁用文件系统重定向,例如:`FileExists('C:\ Windows\Sysnative\filename.dll')` (5认同)

Pau*_*unt 10

没有太多信息可以继续,您使用的代码可能会有所帮助,但这可能是64位问题,而且dll实际上是在SysWOW64文件夹中?请参阅此处,了解其工作原理.