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

时间:2011-10-02 15:43:48

标签: delphi windows-7 delphi-2007

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

4 个答案:

答案 0 :(得分:21)

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

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

答案 1 :(得分:10)

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

答案 2 :(得分:2)

您几乎肯定没有在FileExists来电中指定文件的完整或有效相对路径。 LoadLibrary会搜索某些位置(预计会驻留dll的位置),但FileExists不会。提供完整且正确的路径,FileExists将正常工作。

答案 3 :(得分:1)

这是最荒谬的理由,但如果它只能帮助一个人......

确保您没有不小心将文件命名为 something.dll.dll

我刚刚遇到一种情况,我在客户端计算机上安装了一个应用程序,然后该应用程序在同一目录中找不到 config.txt。这在其他计算机上运行良好,所以我当然被难住了。

事实证明此客户端计算机上的“显示文件扩展名”设置已关闭,并且该文件实际上已命名为 config.txt.txt...为了我的辩护,我将 90% 的时间花在 OSx 上,并且在我自己的 Windows 系统上为 9.99%,很久以前就启用了“显示文件扩展名”。