我想检查System32目录(Windows 7)中是否存在dll。但即使它存在,FileExists()也会返回false。 LoadLibrary返回一个有效的句柄。 在这种情况下,我只想检查文件是否存在并可视化此信息。 你有解决这个问题的任何提示吗?
答案 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%,很久以前就启用了“显示文件扩展名”。