2011-10-02 88 views
6

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

+0

我猜“权限”问题。 Vista/Windows 7对于让人们在\ windows :)中非常保护:) – paulsm4

+0

@ paulsm4:不,那不可能。 Windows会一直让你知道文件是否存在。 –

回答

21

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

如果您确实需要查看真正的64位system32,那么您需要禁用文件重定向。你可以用Wow64DisableWow64FsRedirection()函数来做到这一点。不要忘记用Wow64RevertWow64FsRedirection()重新开启它。请注意,禁用重定向器具有广泛的影响,并可能导致非常奇怪的行为,因此请谨慎行事。

+0

这更像它。 (嗯,这个和一些愚蠢的错字,当然......) –

+0

现在我想到了,我99%是这个问题。 +1,绝对是。 –

+0

是的,可能是这样的,过去我有类似的东西,奇怪的是我的总指挥官也给我看了重定向的文件夹,有人告诉我这是因为它是32位,一切都很清楚(你仍然可以禁用重定向那里)。无论如何,只是检查了TC网站,现在有一个64位测试版。 – balazs

10

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

+1

当然,还有一个+1。 –

2

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

相关问题