System32 とシステム パスの DLL

System32 とシステム パスの DLL

Windows では、Windows がこれらのフォルダーを検索して .dll を検索する方法の優先順位は何ですか? たとえば、同じ dll の 2 つのバージョンがあり、1 つは System 32 フォルダーにあり、もう 1 つはシステム パスにある場合、Windows は最初にどこを検索しますか?

答え1

Windows はまず、Kernel32.dll や User32.dll などの「既知の DLL」を検索します。

Windows は次の順序で DLL を検索します。

Windows システム ディレクトリ。GetSystemDirectory 関数は、このディレクトリのパスを取得します。

Windows ディレクトリ。GetWindowsDirectory 関数は、このディレクトリのパスを取得します。

現在のプロセスの実行可能モジュールが配置されているディレクトリ。

現在のディレクトリ。

PATH 環境変数にリストされているディレクトリ。

64 ビット Windows では、32 ビット プロセスは 64 ビットではなく 32 ビットの system32 ディレクトリを使用することに注意してください。

2k3 または XP の SP1 より前とは少し異なります。

答え2

環境変数によって異なりますPATHが、通常は%windir%\System32の前に追加されます%windir%

開発者の立場から言うと、特にサイドバイサイド アセンブリをサポートする最近の OS バージョン (XP/Vista/2008 など) の場合、可能な限り、これらのフォルダーのいずれにも何もインストールしないようにします。

両方の場所に .DLL を配置するアプリケーションをインストールした場合は、開発者に連絡して修正してもらってください。

答え3

これをやってみましょう:

http://msdn.microsoft.com/en-us/library/7d83bc18(VS.80).aspx

このページを参照する「順序が変更されました!」というコメントに注意してください。

http://msdn.microsoft.com/en-us/library/ms972822.aspx

答え4

DLL の読み込みは Windows API LoadLibrary 関数によって処理され、検索順序はそのドキュメントに記載されています。http://msdn.microsoft.com/en-us/library/ms684175(VS.85).aspx

関連情報