Поиск пути Windows в LoadLibrary с манифестом
-
03-07-2019 - |
Вопрос
Если вы позвоните LoadLibrary
без пути (например, LoadLibrary("whatever.dll")
, Windows обычно использует свой стандартный алгоритм поиска, тот же, который она использует для поиска EXE-файлов.
Мой вопрос таков:Предположим, что в манифесте приложения указана конкретная версия системной DLL, скажем, comctl32.dll 6.0.В таком случае будет LoadLibrary("comctl32.dll")
сразу перейти к нужной параллельной папке или он все равно выполняет какой-то поиск?
Решение
От Майкрософт:
Приложения могут контролировать расположение загрузки DLL, указав полный путь, используя перенаправление DLL или манифест.Если ни один из этих методов не используется, система выполняет поиск DLL во время загрузки, как описано в этом разделе.
Так что да, если манифест присутствует, он попадет непосредственно в папку SxS.
Другие советы
Чтобы проверить загрузчик при возникновении проблем с отсутствующими библиотеками, вы можете использовать функцию «sxstrace». www.codeproject.com/KB/DLL/QueryAssemblyIdentities.aspx дает некоторые подробности о зависимостях между манифестом и WinSxs.