Переназначение динамически подключаемой библиотеки (DLL)
Прикладные программы могут зависеть от конкретной версии совместно используемой DLL и запуск завершается ошибкой, если другое приложение устанавливается с более новой или устаревшей версией одной и той же DLL. Есть два способа гарантировать, чтобы ваше приложение использовало корректную DLL: переназначение DLL и параллельные компоненты. Разработчики и администраторы должны использовать переназначение DLL для существующих приложений, потому что это не требует каких-либо изменений в прикладной программе. Если Вы создаете новое приложение или модифицируете его и хотите изолировать свое приложение от возможных проблем, то создается параллельный компонент.
Чтобы использовать переназначение DLL, создайте для своего приложения файл переназначения (redirection file). Файл переназначения должен быть назван как ниже указано: App_name.local. Например, если имя приложения - Editor.exe, файл переназначения должен быть назван Editor.exe.local. Вы должны установить .local файл в каталог прикладной программы. Вы должны также установить эти DLL в каталог приложения.
Содержание файла переназначения игнорируется, но его присутствие заставляет Windows проверять каталог приложения всякий раз, когда система загружает DLL, независимо от пути, заданного в LoadLibrary или LoadLibraryEx. Если DLL не найдена в каталоге прикладной программы, то эти функции используют свой обычный порядок поиска. Например, если приложение c:\myapp\myapp.exe вызывает LoadLibrary, используя нижеследующий путь:
c:\program files\common files\system\mydll.dllИ если и c:\myapp\myapp.exe.local и c:\myapp\mydll.dll существуют, функция LoadLibrary загружает c:\myapp\mydll.dll. В противном случае, LoadLibrary загружает c:\program files\common files\system\mydll.dll.
В качестве альтернативы, если каталог называемый c:\myapp\myapp.exe.local существует и содержит mydll.dll, функция LoadLibrary загружает c:\myapp\myapp.exe.local\mydll.dll.
Известные DLL не могут быть переназначены. Список известных DLL смотри в следующем ключе реестра:
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\KnownDLLs. |
Система использует утилиту Windows File Protection (защита файлов Windows), чтобы гарантировать, что системные DLL, такие как эти, не будут обновляться или удаляться, исключая случаи обновления операционной системы (OS) типа сервисных пакетов (service packs).
Windows 2000: Известные DLL в этой ОС могут быть переназначены.
Если приложение имеет манифест, то любые .local файлы игнорируются.
Windows 2000: Манифесты не воздействуют на переназначение DLL.
Хорошей практикой является то, чтобы устанавливать DLL приложения в том же самом каталоге, который содержит прикладную программу, даже если Вы не используете переназначение DLL . Это гарантирует, что инсталляция приложения не записывает поверх другие копии DLL и заставляет другие прикладные программы завершаться ошибкой. Также, если Вы следуете этой хорошей практике, другие приложения не не записывают поверх вашей копии DLL и заставляют ваше приложение завершиться ошибкой.