Как узнать имя своей библиотеки dll
Обновлено: 21.08.2024
Система может содержать несколько версий одной библиотеки динамической компоновки (DLL). Приложения могут управлять расположением, из которого загружается DLL, путем указания полного пути или использования другого механизма, например манифеста. Если эти методы не используются, система выполняет поиск библиотеки DLL во время загрузки, как описано в этом разделе.
Факторы, влияющие на поиск
На то, что система осуществляет поиск библиотеки DLL, влияют следующие факторы:
- Если библиотека DLL с таким же именем модуля уже загружена в память, система проверяет только перенаправление и манифест перед разрешением в загруженную библиотеку DLL, независимо от того, в каком каталоге он находится. Система не выполняет поиск библиотеки DLL.
- если библиотека dll находится в списке известных библиотек dll для версии Windows, в которой выполняется приложение, система использует свою копию известной библиотеки dll (и зависимые библиотеки dll, если они есть) вместо поиска библиотеки dll. Список известных библиотек DLL в текущей системе см. в следующем разделе реестра: hKey _ локальный _ компьютер \ System \ CurrentControlSet \ Control \ Manager \ кновндллс.
- Если библиотека DLL имеет зависимости, система выполняет поиск зависимых библиотек DLL, как если бы они загружались только с именами модулей. Это справедливо, даже если первая библиотека DLL была загружена путем указания полного пути.
Порядок поиска для приложений UWP
когда приложение UWP для Windows 10 (или приложение магазина для Windows 8. x) загружает упакованный модуль путем вызова функции LoadPackagedLibrary , библиотека DLL должна находиться в графе зависимостей пакета процесса. Дополнительные сведения см. в разделе LoadPackagedLibrary. Когда приложение UWP загружает модуль другими способами и не указывает полный путь, система выполняет поиск библиотеки DLL и ее зависимостей во время загрузки, как описано в этом разделе.
Прежде чем система будет искать библиотеку DLL, она проверяет следующее:
- Если библиотека DLL с таким же именем модуля уже загружена в память, система использует загруженную библиотеку DLL независимо от того, в каком каталоге она находится. Система не выполняет поиск библиотеки DLL.
- если библиотека dll находится в списке известных библиотек dll для версии Windows, в которой выполняется приложение, система использует свою копию известной библиотеки dll (и зависимые от нее библиотеки dll, если таковые имеются). Система не выполняет поиск библиотеки DLL. Список известных библиотек DLL в текущей системе см. в следующем разделе реестра: hKey _ локальный _ компьютер \ System \ CurrentControlSet \ Control \ Manager \ кновндллс.
Если система должна искать модуль или его зависимости, она всегда использует порядок поиска для приложений UWP, даже если зависимость не является кодом приложения UWP.
Стандартный порядок поиска для приложений UWP
Если модуль еще не загружен или в списке известных библиотек DLL, система выполняет поиск в следующих расположениях в следующем порядке:
- Граф зависимостей пакета для процесса. Это пакет приложения, а также все зависимости, указанные как <PackageDependency> в <Dependencies> разделе манифеста пакета приложения. Поиск зависимостей осуществляется в том порядке, в котором они отображаются в манифесте.
- Каталог, из которого был загружен вызывающий процесс.
- Системный каталог (% SystemRoot% \ System32).
Если библиотека DLL имеет зависимости, система выполняет поиск зависимых библиотек DLL, как если бы они загружались только с именами модулей. Это справедливо, даже если первая библиотека DLL была загружена путем указания полного пути.
Альтернативный порядок поиска для приложений UWP
Если модуль изменяет стандартный порядок поиска, вызывая функцию LoadLibraryEx с параметром Load _ с _ измененным _ _ путем поиска, система выполняет поиск в каталоге указанного модуля вместо каталога вызывающего процесса. Система выполняет поиск в следующих расположениях в следующем порядке:
- Граф зависимостей пакета для процесса. Это пакет приложения, а также все зависимости, указанные как <PackageDependency> в <Dependencies> разделе манифеста пакета приложения. Поиск зависимостей осуществляется в том порядке, в котором они отображаются в манифесте.
- Каталог, из которого был загружен указанный модуль.
- Системный каталог (% SystemRoot% \ System32).
Порядок поиска для настольных приложений
Настольные приложения могут управлять расположением, из которого загружается DLL, путем указания полного пути, использования перенаправления DLLили манифеста. Если ни один из этих методов не используется, система выполняет поиск библиотеки DLL во время загрузки, как описано в этом разделе.
Прежде чем система будет искать библиотеку DLL, она проверяет следующее:
- Если библиотека DLL с таким же именем модуля уже загружена в память, система использует загруженную библиотеку DLL независимо от того, в каком каталоге она находится. Система не выполняет поиск библиотеки DLL.
- если библиотека dll находится в списке известных библиотек dll для версии Windows, в которой выполняется приложение, система использует свою копию известной библиотеки dll (и зависимые от нее библиотеки dll, если таковые имеются). Система не выполняет поиск библиотеки DLL. Список известных библиотек DLL в текущей системе см. в следующем разделе реестра: hKey _ локальный _ компьютер \ System \ CurrentControlSet \ Control \ Manager \ кновндллс.
Если библиотека DLL имеет зависимости, система выполняет поиск зависимых библиотек DLL, как если бы они загружались только с именами модулей. Это справедливо, даже если первая библиотека DLL была загружена путем указания полного пути.
Если злоумышленник получает контроль над одним из каталогов, в котором выполняется поиск, он может поместить в этот каталог вредоносную копию библиотеки DLL. Способы предотвращения таких атак см. в разделе безопасность библиотеки динамической компоновки.
Стандартный порядок поиска для настольных приложений
Стандартный порядок поиска библиотек DLL, используемый системой, зависит от того, включен или отключен режим поиска "Защищенная библиотека DLL". Сейф Режим поиска библиотек DLL помещает текущий каталог пользователя в последующий порядок поиска.
Сейф По умолчанию включен режим поиска DLL. Чтобы отключить эту функцию, создайте параметр реестра hKey _ Local _ Machine \ System \ CurrentControlSet \ Control \ Manager \ сафедллсеарчмоде и задайте для него значение 0. Вызов функции сетдллдиректори эффективно отключает сафедллсеарчмоде , пока указанный каталог находится в пути поиска и изменяет порядок поиска, как описано в этом разделе.
Если сафедллсеарчмоде включен, порядок поиска выглядит следующим образом:
- Каталог, из которого загружено приложение.
- Системный каталог. Чтобы получить путь к этому каталогу, используйте функцию GetSystemDirectory .
- 16-разрядный системный каталог. Отсутствует функция, которая получает путь к этому каталогу, но ищет его.
- Windows каталог. Чтобы получить путь к этому каталогу, используйте функцию жетвиндовсдиректори .
- Текущий каталог.
- Каталоги, перечисленные в переменной среды PATH. Обратите внимание, что сюда не входит путь для каждого приложения, указанный в разделе реестра пути к приложению. Ключ путей приложений не используется при вычислении пути поиска DLL.
Если сафедллсеарчмоде отключен, то порядок поиска выглядит следующим образом:
- Каталог, из которого загружено приложение.
- Текущий каталог.
- Системный каталог. Чтобы получить путь к этому каталогу, используйте функцию GetSystemDirectory .
- 16-разрядный системный каталог. Отсутствует функция, которая получает путь к этому каталогу, но ищет его.
- Windows каталог. Чтобы получить путь к этому каталогу, используйте функцию жетвиндовсдиректори .
- Каталоги, перечисленные в переменной среды PATH. Обратите внимание, что сюда не входит путь для каждого приложения, указанный в разделе реестра пути к приложению. Ключ путей приложений не используется при вычислении пути поиска DLL.
Альтернативный порядок поиска для настольных приложений
Стандартный порядок поиска, используемый системой, можно изменить, вызвав функцию LoadLibraryEx с параметром Load _ с _ измененным _ _ путем поиска. Стандартный порядок поиска также можно изменить, вызвав функцию сетдллдиректори .
Стандартный порядок поиска процесса также будет зависеть от вызова функции сетдллдиректори в родительском процессе перед началом текущего процесса.
Если указать альтернативную стратегию поиска, ее поведение будет продолжаться до тех пор, пока не будут найдены все связанные исполняемые модули. После того как система начнет обработку подпрограмм инициализации DLL, система вернется к стандартной стратегии поиска.
Функция LoadLibraryEx поддерживает альтернативный порядок поиска, если вызов указывает загрузку _ с _ измененным _ _ путем поиска , а параметр лпфиленаме указывает абсолютный путь.
Обратите внимание, что стандартная стратегия поиска и альтернативная стратегия поиска, заданная параметром LoadLibraryEx с _ путем загрузки с _ измененным _ _ путем поиска , отличаются только одним способом: Стандартный поиск начинается в каталоге вызывающего приложения, а альтернативный Поиск начинается в каталоге исполняемого модуля, который загружает LoadLibraryEx .
Если сафедллсеарчмоде включен, альтернативный порядок поиска выглядит следующим образом:
- Каталог, заданный параметром лпфиленаме.
- Системный каталог. Чтобы получить путь к этому каталогу, используйте функцию GetSystemDirectory .
- 16-разрядный системный каталог. Отсутствует функция, которая получает путь к этому каталогу, но ищет его.
- Windows каталог. Чтобы получить путь к этому каталогу, используйте функцию жетвиндовсдиректори .
- Текущий каталог.
- Каталоги, перечисленные в переменной среды PATH. Обратите внимание, что сюда не входит путь для каждого приложения, указанный в разделе реестра пути к приложению. Ключ путей приложений не используется при вычислении пути поиска DLL.
Если сафедллсеарчмоде отключен, альтернативный порядок поиска выглядит следующим образом:
- Каталог, заданный параметром лпфиленаме.
- Текущий каталог.
- Системный каталог. Чтобы получить путь к этому каталогу, используйте функцию GetSystemDirectory .
- 16-разрядный системный каталог. Отсутствует функция, которая получает путь к этому каталогу, но ищет его.
- Windows каталог. Чтобы получить путь к этому каталогу, используйте функцию жетвиндовсдиректори .
- Каталоги, перечисленные в переменной среды PATH. Обратите внимание, что сюда не входит путь для каждого приложения, указанный в разделе реестра пути к приложению. Ключ путей приложений не используется при вычислении пути поиска DLL.
Функция сетдллдиректори поддерживает альтернативный порядок поиска, если параметр лппаснаме задает путь. Альтернативный порядок поиска выглядит следующим образом:
- Каталог, из которого загружено приложение.
- Каталог, указанный параметром лппаснаме параметра сетдллдиректори.
- Системный каталог. Чтобы получить путь к этому каталогу, используйте функцию GetSystemDirectory . Имя этого каталога — System32.
- 16-разрядный системный каталог. Отсутствует функция, которая получает путь к этому каталогу, но ищет его. Имя этого каталога — System.
- Windows каталог. Чтобы получить путь к этому каталогу, используйте функцию жетвиндовсдиректори .
- Каталоги, перечисленные в переменной среды PATH. Обратите внимание, что сюда не входит путь для каждого приложения, указанный в разделе реестра пути к приложению. Ключ путей приложений не используется при вычислении пути поиска DLL.
Если параметр лппаснаме является пустой строкой, вызов удаляет текущий каталог из порядка поиска.
Сетдллдиректори эффективно отключает режим поиска в защищенных библиотеках DLL, пока указанный каталог находится в пути поиска. Чтобы восстановить защищенный режим поиска DLL на основе значения реестра сафедллсеарчмоде и восстановить текущий каталог в порядке поиска, вызовите сетдллдиректори с лппаснаме как null.
Порядок поиска с помощью флагов _ _ поиска "загрузить библиотеку "
Приложение может указать порядок поиска, используя один или несколько флагов _ _ поиска в библиотеке загрузки с помощью функции LoadLibraryEx . Приложение также может использовать флаги _ _ поиска библиотеки Load с функцией сетдефаултдллдиректориес , чтобы установить порядок поиска библиотек DLL для процесса. Приложение может указать дополнительные каталоги для порядка поиска DLL процесса с помощью функций адддллдиректори или сетдллдиректори .
Искомые каталоги зависят от флагов, указанных в сетдефаултдллдиректориес или LoadLibraryEx. Если используется более одного флага, поиск соответствующих каталогов выполняется в следующем порядке:
- Каталог, содержащий библиотеку DLL (Загрузка _ библиотеки _ DLL поиска _ _ _ по библиотеке Load). Этот каталог ищет только зависимости загружаемой библиотеки DLL.
- Каталог приложения (Загрузка _ библиотеки поиск _ каталога _ приложения _).
- Пути, явно добавленные с помощью функции адддллдиректори (Загрузка _ библиотеки _ Поиск _ пользователя _ dirs) или функции сетдллдиректори . Если добавлен более одного пути, порядок поиска путей не определен.
- Системный каталог (загрузить _ библиотеку _ поиска _ system32).
Если приложение не вызывает LoadLibraryEx с любыми флагами _ _ поиска в библиотеке нагрузки или не устанавливает порядок поиска DLL для процесса, система выполняет поиск библиотек DLL, используя стандартный или альтернативный порядок поиска.
Варианты решения проблемы
Имеется несколько методов, позволяющих устранить данную проблему. Рассмотрим каждый из них подробнее.
Способ 1: OCX/DLL Manager
OCX/DLL Manager – это маленькая программа которая может помочь зарегистрировать библиотеку или файл OCX.
OCX/DLL Manager также умеет отменять регистрацию библиотеки, для этого понадобится выбрать в меню пункт «Unregister OCX/DLL» и в последствии проделать все те же операции, как и в первом случае. Функция отмены может вам понадобиться для сравнения результатов при активированном файле и при отключенном, а также в процессе удаления некоторых компьютерных вирусов.
В процессе регистрации, система может выдать вам ошибку, говорящую о том, что требуются права администратора. В таком случае, нужно запустить программу нажав на неё правой кнопкой мыши, и выбрать «Запуск от имени администратора».
Способ 2: Меню «Выполнить»
Можно зарегистрировать DLL, используя команду «Выполнить» в стартовом меню операционной системы Windows. Для этого нужно будет произвести следующие действия:
- Нажать клавиатурную комбинацию «Windows + R» или выбрать пункт «Выполнить» из меню «Пуск».
Этот пример подойдёт вам в том случае, если операционная система установлена на диск С. Если она находится в другом месте, то нужно будет поменять букву диска или воспользоваться командой:
В таком варианте программа сама находит папку где у вас установлена ОС и запускает регистрацию указанного DLL файла.
В случае с 64-разрядной системой у вас будет две программы regsvr32 — одна находится в папке:
и вторая по пути:
Это разные файлы, которые используются раздельно для соответствующих ситуаций. Если у вас 64-битная ОС, а файл DLL 32-битный, тогда сам файл библиотеки должен быть помещен в папку:
и команда будет выглядеть уже так:
Способ 3: Командная строка
- Выберите команду «Выполнить» в меню «Пуск».
- Впишите в открывшемся поле для ввода cmd.
- Нажмите «Enter».
Перед вами появится окно, в котором нужно будет вводить те же команды, что и во втором варианте.
Надо отметить, что у окна командной строки имеется функция вставки скопированного текста (для удобства). Найти это меню можно, нажав правой кнопкой на пиктограмме в левом верхнем углу.
Способ 4: Открыть с помощью
- Откройте меню файла, который будете регистрировать, нажав по нему правой кнопкой мыши.
- Выберите «Открыть с помощью» в появившемся меню.
или в случае, если вы работаете в 64-битной системе, а файл DLL 32-разрядный:
Возможные ошибки
«Файл не совместим с установленной версией Windows» — это означает, что вы, скорее всего, пытаетесь зарегистрировать 64-разрядную DLL в 32-битной системе или наоборот. Воспользуйтесь соответствующей командой, описанной во втором способе.
В заключение нужно сказать, что суть всех предложенных вариантов одна и та же — это просто разные методы запуска команды регистрации — кому как удобнее.
Отблагодарите автора, поделитесь статьей в социальных сетях.
Все, что для этого необходимо, — пара минут времени и администраторские привилегии.
Три метода регистрации DLL в ОС
Если dll файл уже скопирован в соответствующий каталог, выполняем следующие действия:
- Вызываем окно «Выполнить», нажав сочетание клавиш «Win+ R».
- Вводим шаблонную команду «regsvr32 file_name.dll».
- Кликаем «Ок» или «Enter».
Команду можете вводить и в поисковую строку «Пуска».
File_name.dll – имя файла, имеющего формат dll, если он расположен в системном каталоге.
Второй метод зарегистрировать библиотеку dll в windows 7 – ввод аналогичной команды, но в текстовую строку командного интерпретатора.
- Вызываем командную консоль с администраторскими привилегиями.
- Открываем контекстное меню файла «cmd.exe» (в «восьмерке» жмем «Win + X») и выбираем соответствующий вариант.
Последний, третий метод зарегистрировать dll в Windows 8 и прочих ОС от Microsoft предполагает следование итерациям следующего алгоритма:
- вызываем контекстное меню библиотеки;
- выбираем «Открыть с помощью»;
- жмем «Обзор» и указываем путь к regsvr32.exe (каталог System32 или SysWow64);
- кликаем «Ок».
Таким образом сможем открыть файл dll в windows 7, зарегистрировав его.
Почему не удается зарегистрировать DLL
Возвращаемся к появлению ошибок«не удалось загрузить модуль»,«библиотека несовместима c редакцией Windows», «не обнаружена точка входа» и прочих, не позволяющих выполнить регистрацию нового динамически загружаемого компонента ОС.
Причины появления ошибок:
Способы исправления ошибок с регистрацией библиотек в системе.
В первую очередь,найдите информацию о проблемном файле в интернете.
Возможно он принадлежит какой-либо программе – переустановите ее.Например, dll-ки, имена которых начинаются на «d3d» принадлежат компоненту DirectX.После его инсталляции или переустановки все подобные ошибки исчезнут.
Если в имени встречается фраза «audio» — проблема касается аудиокодеков или драйвера звуковой платы, «vc» — установите последнюю редакцию VisualStudioRedistributable.
При невозможности выполнить регистрацию принадлежащей загруженной с торрент-трекеров взломанной игре проверьте карантин антивирусной программы. Вдруг в списке подозрительных объектов находится проблемный dll-файл, восстановите его и добавьте в исключения.
Если на компьютере отсутствует или повреждена какая-либо библиотека .dll, связанная с ней программа или служба будет работать некорректно. Windows будет выдавать ошибку, что DLL-файл поврежден или отсутствует. Для решения проблемы нужно скачать требуемую библиотеку для своей версии Windows, скопировать её в нужную папку и зарегистрировать в системе.
Вне зависимости от того, какой программой и для чего используется dll-файл, установка и регистрация библиотеки всегда будет происходить по одному алгоритму. Все версии ОС Windows руководствуются одними правилами при подключении и регистрации динамических библиотек.
Пошаговая инструкция:
Как и куда копировать DLL файл
Ошибки с динамическими библиотеками DLL возникают по разным причинам: файл поврежден, несовместим с Windows или конкретной программой, заражен вирусами или удален. Решение всегда одно: загрузить корректную и полную версию библиотеки, после чего зарегистрировать файл в системе через командную строку. Обычно, весь процесс занимает не более 2-5 минут.
Сюда можно поместить (разархивировать и копировать) любые библиотеки dll, и установленные файлы будут работать:
- Для Windows 95/98/Me — файл копируется в папку C:\Windows\System
- Для Windows NT/2000 — файл копируется в папку C:\WINNT\System32
- Для Windows XP, Vista, 7, 8 — копировать в папку C:\Windows\System32
- Для 64-разрядных Windows — копировать dll файл в папку C:\Windows\SysWOW64
Где можно загрузить нужную библиотеку:
Возможно, игра или софт несовместим с версией Windows, решением может служить запуск в режиме совместимости. Если файлы блокируются антивирусом, следует внимательнее присмотреться к безопасности приложения или добавить файлы в исключения антивируса.
Для регистрации библиотеки нужно написать команду regsvr32 имяфайла.dll и нажать Enter. К примеру, regsvr32.exe msvcp110.dll.
Для того, чтобы изменения вступили в силу и библиотека начала работать, необходимо перезагрузить компьютер. Если Windows не хочет находить требуемый файл, можно указать полный путь: regsvr32.exe полный_путь_к_файлу.dll, например regsvr32.exe C:/Windows/System32/msvcp110.dll.
Среди частых вопросов пользователей, особенно после того, как они сталкиваются с тем, что какая-то из библиотек DLL отсутствует в Windows 10, Windows 11 или других версиях системы — как зарегистрировать DLL в соответствующей версии ОС.
В этой инструкции подробно о способах регистрации библиотек DLL в Windows x64 и x86 (32-бит) с помощью regsvr32.exe (и кратко о regasm.exe), о возможных нюансах и проблемах, которые могут возникнуть в процессе.
Дальнейшие шаги описаны в предположении, что DLL, которую нужно зарегистрировать, уже находится в нужном расположении: папке C:\Windows\System32, C:\Windows\SysWOW64 или, в некоторых случаях — отдельных папках программ, к которой относится соответствующая библиотека, например, для 1С — C:\Program Files\1cv8\номер_версии\bin (или Program Files x86 в случае 32-битной версии).
Прежде чем приступить к регистрации библиотеки, учитывайте следующие моменты:
- В x64 версиях Windows 64-битные DLL хранятся в System32, а 32-битные — в SysWOW64 (у некоторых начинающих пользователей бывает обратное предположение исходя из имён папок).
- Файлы DLL x64 и x86 (32-бит) — это разные файлы. И если прямого указания на разрядность в месте загрузки файла нет, то чаще это 32-битный файл (что не мешает ему работать в x64 системе), но это не всегда так.
- Для регистрации библиотеки DLL используется системный инструмент regsvr32.exe, который также доступен в двух версиях, которые лежат в папках System32 и SysWOW64 (в случае 64-битных систем). По умолчанию при описываемых далее действиях запускается x64 версия.
- 32-битным программам и играм (по умолчанию устанавливаются в Program Files x86 в 32-битных системах) для работы нужны 32-битные DLL, не зависимо от разрядности Windows.
Сам процесс регистрации в общем случае состоит из следующих шагов:
Почему не удается зарегистрировать DLL
Ошибка при регистрации с помощью regsvr32 вида «Точка входа DllRegisterServer не найдена» говорит о том, что эта библиотека DLL не поддерживает регистрацию описанным методом. Можно попробовать использовать вариант команды:
но с большой вероятностью и это не поможет.
У большинства домашних пользователей такая проблема возникает при регистрации файлов DLL для игр и программ, часто не вполне лицензионных, которые сообщили, что нужный файл DLL не обнаружен или отсутствует. Причем сами библиотеки DLL обычно скачаны со сторонних сайтов (и чаще всего имеют имена начинающиеся с «vc», «msvc» или «d3d»). А решение, как правило, простое — выяснить, частью какого набора компонентов является эта DLL и установить эти компоненты с помощью их собственного установщика. Более подробно проблема и подходы к решению описаны в инструкции Точка входа DllRegisterServer не найдена — причины и возможные решения.
Видео
Надеюсь, цель достигнута, а количество вопросов, связанных с регистрацией DLL в Windows, уменьшилось.
Читайте также: