Перенаправление библиотеки Dynamic-Link

Приложения могут зависеть от конкретной версии общей библиотеки DLL и начать неудачу, если установлено другое приложение с более новой или более ранней версией той же DLL. Существует два способа убедиться, что приложение использует правильную библиотеку DLL: перенаправление DLL и параллельные компоненты. Разработчикам и администраторам следует использовать перенаправление библиотек DLL для существующих приложений, так как оно не требует каких-либо изменений в приложении. Если вы создаете новое приложение или обновляете приложение и хотите изолировать приложение от потенциальных проблем, создайте параллельный компонент.

Чтобы включить перенаправление библиотек DLL на уровне компьютера, необходимо создать новый раздел реестра. Создайте новый ключ DWORD с именем девоверридинабле в HKLM\Software\Microsoft\Windows нт\куррентверсион\имаже File Options и задайте для него значение 1. После этого необходимо перезагрузить компьютер, чтобы увидеть эффекты.

Чтобы использовать перенаправление библиотек DLL, создайте файл перенаправления для приложения. Файл перенаправления должен называться следующим образом: app _ Name. local. Например, если имя приложения — Editor.exe, файл перенаправления должен называться Editor.exe. 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 и приложение не имеет доступа ко всем дискам и каталогам в порядке поиска, LoadLibrary прекращает поиск, как только доступ будет запрещен. (Если перенаправление библиотек DLL не используется, то LoadLibrary пропускает недоступные каталоги, а затем продолжит поиск.)

Рекомендуется устанавливать библиотеки DLL приложения в тот же каталог, где находится приложение, даже если перенаправление библиотек DLL не используется. Это гарантирует, что установка приложения не перезаписывает другие копии библиотеки DLL и приведет к сбою других приложений. Кроме того, при выполнении этой хорошей методики другие приложения не перезапишут копию библиотеки DLL и приведут к сбою приложения.