Назад | Перейти на главную страницу

Dll в System32 по сравнению с системным путем

В Windows каковы предпочтения того, как Windows просматривает эти папки в поисках .dll? Например, если у меня есть две версии одной и той же dll, одна в папке System 32, а другая в системном пути, где сначала будет искать Windows?

Windows сначала ищет «известные библиотеки DLL», такие как Kernel32.dll и User32.dll.

Затем Windows ищет библиотеки DLL в следующей последовательности:

Системный каталог Windows. Функция GetSystemDirectory извлекает путь к этому каталогу.

Каталог Windows. Функция GetWindowsDirectory извлекает путь к этому каталогу.

Каталог, в котором находится исполняемый модуль для текущего процесса.

Текущий каталог.

Каталоги, перечисленные в переменной среды PATH.

Обратите внимание, что в 64-битных Windows 32-битные процессы используют 32-битный каталог system32, а не 64-битный.

Немного отличается pre sp1 от 2k3 или XP.

Зависит от вашего PATH переменная окружения, но обычно %windir%\System32 добавляется перед %windir%.

В моей шляпе разработчика: по возможности я бы избегал установки чего-либо в любую из этих папок, особенно для последних версий ОС с поддержкой параллельной сборки (например, XP / Vista / 2008).

Если вы установили приложение, которое помещает .DLL в оба места, я бы связался с разработчиком, чтобы исправить это.

Удачи на этом:

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

Обратите внимание на "Порядок изменился!" комментарий, который ссылается на эту страницу:

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

Загрузка DLL осуществляется функцией Windows API LoadLibrary, и порядок поиска описан в соответствующей документации: http://msdn.microsoft.com/en-us/library/ms684175(VS.85).aspx