FileExists () возвращает false, даже если файл существует - PullRequest
7 голосов
/ 02 октября 2011

Я хочу проверить, существует ли dll в каталоге System32 (Windows 7). Но даже если он существует, FileExists () возвращает false. LoadLibrary возвращает действительный дескриптор. В этом случае я только хочу проверить, существуют ли файлы, и визуализировать эту информацию. У вас есть какие-либо советы, чтобы решить эту проблему?

Ответы [ 3 ]

21 голосов
/ 02 октября 2011

Скорее всего, это связано с перенаправлением файлов.У вас есть 64-битная машина, но из процесса 32 Delphi Windows\system32 фактически перенаправляет на Windows\Syswow64.Поэтому, когда вы думаете, что запрашиваете наличие файла в Windows\system32, система фактически сообщает о существовании (или иным образом) файла в Windows\Syswow64.

.в истинную 64-битную систему32, вам нужно отключить перенаправление файлов.Вы можете сделать это с помощью функции Wow64DisableWow64FsRedirection().Не забудьте снова включить его с помощью Wow64RevertWow64FsRedirection().Помните, что отключение перенаправителя имеет широкий охват и может привести к очень странному поведению, поэтому делайте это с осторожностью.

10 голосов
/ 02 октября 2011

Не так много информации, код, который вы используете, может помочь, но может ли это быть 64-битной проблемой и что dll на самом деле находится в папке SysWOW64? См. здесь для хорошего описания того, как это работает.

2 голосов
/ 02 октября 2011

Вы почти наверняка не указываете полный или действительный относительный путь к файлу в вашем вызове FileExists.LoadLibrary будет искать для вас определенные места (те, где, как ожидается, будут находиться dll), но FileExists не будет.Укажите полный и правильный путь, и FileExists будет работать правильно.

...