2011-10-02 120 views
6

System32ディレクトリ(Windows 7)のdllが存在するかどうかを確認します。しかし、それが存在するとしても、FileExists()はfalseを返します。 LoadLibraryは有効なハンドルを返します。 この場合、ファイルが存在するかどうかを確認してこの情報を視覚化したいだけです。 これを解決するためのヒントはありますか?FileExists()は、ファイルが存在していてもfalseを返します。

+0

私は "権限"の問題を推測しています。 Vista/Windows 7は、人々が\ windowsの周りにうんざりさせることについて非常に守っています:) – paulsm4

+0

@ paulsm4:いいえ、それはできません。 Windowsでは、ファイルが存在するかどうかを常に確認できます。 –

答えて

21

ほとんどの場合、これはファイルのリダイレクトになります。あなたは64ビットマシンを持っていますが、32デルファイプロセスからは、Windows\system32は実際にWindows\Syswow64にリダイレクトします。したがって、ファイルの存在をWindows\system32に尋ねていると思うと、システムは実際にはファイルの存在(またはその他のもの)をWindows\Syswow64に報告しています。

真の64ビットsystem32を見る必要がある場合は、ファイルのリダイレクトを無効にする必要があります。 Wow64DisableWow64FsRedirection()機能でこれを行うことができます。 Wow64RevertWow64FsRedirection()でそれを元に戻すことを忘れないでください。リダイレクタを無効にすると幅広い到達効果があり、非常に奇妙な動作になる可能性があるので注意してください。

+0

これはもっと似ています。 (まあ、これといくつかのばかげたタイプミス、もちろん...) –

+0

私はそれについて考えると、私は99%ですが、これは問題です。 +1、間違いなく。 –

+0

はい、これはおそらくこれに当てはまりますが、これまでと同じようなことがありました。私の総司令官は、リダイレクトされたフォルダも表示しました。そこ)。とにかくTCサイトをチェックしたところ、64ビットのベータ版があります。 – balazs

10

あなたが使用しているコードは助けになるかもしれませんが、これは64ビットの問題であり、実際にはDLLはSysWOW64フォルダにありますか?この仕組みの詳細については、hereを参照してください。

+1

もちろん、ここでも+1です。 –

2

FileExistsコールでは、ファイルの完全または有効な相対パスを指定することはほとんどありません。 LoadLibraryは、特定の場所(dllが存在すると予想される場所)を検索しますが、FileExistsは検索しません。完全で正確なパスを指定すると、FileExistsが正しく動作します。

関連する問題