2011-10-02 87 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將正常工作。

相關問題