Установка и регистрация библиотек DLL в Windows. Регистрируем файл DLL в ОС Windows Как зарегистрировать файл в реестре

16.08.2023

Не регистрируется Dll, ActiveX под Windows 7 - что делать?

В привычных всем Windows до XP включительно регистрация Dll, ActiveX компонентов без проблем выполнялась командой regsvr32.

В Windows 7 в принципе то же самое, но внесены некоторые "усовершенствования", из-за чего привычный порядок действий нередко не дает ожидаемого результата. Например:

Согласитесь, очень понятное и информативное сообщение. Отличный повод для разработчика ОС - предложить пользователю приобрести выпустить Windows 8, новую, еще более усовершенствованную версию, где это сообщение, возможно, переведут на человеческий язык.

А именно: окно терминала (командной строки, cmd) следует открывать командой "Запуск от имени администратора" (доступно нажатием правой кнопки мыши).

В большинстве случаев это решает проблему.

Дополнительные действия могут потребоваться, если используется 64битная версия ОС. Дело в том, что программы в ней могут быть не только 64битными но и 32 битными. Причем большинство программ - 32битные, ибо польза от 64бит есть только на ресурсоемких приложениях.

В частности, клиентская часть 1С (т.е. та 1С, с которой работает пользователь) является 32 битным приложением. (Вот сервер 1С уже может быть как 32 битным, так и 64битным, но это касается больших организаций, если у Вас 1С Бухгалтерия и 5 пользователей, то 99% что у Вас никакого сервера 1С нет и все 32 битное).

ActiveX компоненты также могут быть 32 битными или 64 битными, причем должна использоваться та версия, разрядность которой соответствует приложению. OcvitaBarcode ActiveX является 32 битным приложением.

Так вот, программы для регистрации 32битных и 64 битных ActiveX в Windows 6 64 битной тоже разные, но при этом они обе называются regsvr32.exe. (Как говорил Козьма Прутков, "если на клетке со слоном написано "буйвол", не верь глазам своим".) Поэтому, если Вы просто набираете в командной строке

regsvr32 какая-то.ocx

то в теории должна запуститься нужная regsvr32, на практике может запуститься что угодно. Зачем так сделано? ну все за тем же, если сразу сделать по-человечески, кто будет новую версию Windows покупать.

Поэтому для гарантированного запуска 32битной regsvr32, следует в окне терминала набирать команду

c:\windows\syswow64\regsvr32.exe OcvitaBarcode.ocx

Если windows установлена не в c:\windows, то путь естественно, указываем какой есть. И помним, что окно терминала следует открывать от имени администратора.

При соблюдении вышеуказанных правил 32битные ActiveX, в т.ч. OcvitaBarcode ActiveX без проблем работают в Windows 7:


Крайне неприятная ошибка в Windows «Модуль загружен, но точка входа DLLRegisterServer не найдена» связана, как правило, с некорректным функционированием динамически подключаемой библиотеки (сокр., «.dll»), к которой обращается программа в процессе своей работы. В результате встроенный в Windows процесс отвечающий за регистрацию библиотеки в ОС, отказывается ее принять либо не может найти. А программа, обращающаяся к неработающим модулям, соответственно, не функционирует. Потому, предлагаю разложить по полочкам данную проблему для того, чтобы понять, каким образом ее можно исправить.

В чём суть ошибки «Модуль загружен, но точка входа DLLRegisterServer входа не найдена»?

Итак, объяснение смысла данной ошибки закономерно будет начать с определения «библиотеки «. Библиотека или в некоторых языках программирования, модуль (модули) — это набор подпрограмм, используемых в разработке программного обеспечения. Проще говоря, это совокупность небольших и независимых блоков, каждый из которых является функционально законченным фрагментом кода.

Для чего они предназначены? Существует огромное количество подпрограмм или процедур, выполняющих самые разные задачи. Некоторые из них содержат стандартные для многих программ вычислительные операции. К примеру, открытие диалоговых окон в Windows или нахождение квадратного корня из любого числа — это стандартные, часто встречающиеся процедуры. Так вот, чтобы не писать код таких подпрограмм каждый раз при создании ПО, были придуманы заранее заготовленные файлы, которые получили название «библиотеки». С помощью специальной функции их можно подключить к программе, при этом исполнимый код этой библиотеки не будет внедряться в код приложения, что позволяет сэкономить память ПК.


Библиотека dll

Динамические библиотеки DLL, встраиваемые в Windows, принадлежат к модулям общего пользования (shared library). Отличительные их особенности для пользователя состоят в следующем:

  • Функции, прописанные в таких библиотеках, могут использоваться несколькими программами одновременно;
  • Загружаются они по запросу соответствующего процесса, то есть динамически, не потребляя без надобности ресурсы ПК.

К сожалению, у DLL модулей есть и недостатки. Не будем говорить о так называемом «DLL Hell», так как на данный момент, несмотря на нарушение самого идейного принципа динамических библиотек общего пользования, разработчики Microsoft разрешили эту проблему. Гораздо важнее в данной статье отметить следующие недостатки:

  • При внесении в библиотеку изменений программы, использующие ее могут перестать работать. Этот недочет является излюбленным у распространителей вирусов. Ведь сама Windows функционирует на основе модулей и, повредив их код, можно повлиять на работу ОС.
  • При отсутствии библиотеки или ее некорректной версии программа, использующая данный модуль, соответственно, будет либо неправильно функционировать, либо откажется работать.
  • Функции, прописанные в библиотеке Dll, получают один адрес в оперативной памяти для всех процессов, вызывающих их, что упрощает эксплуатацию уязвимостей модульного метода организации ПО;

Теперь о том, что такое точка входа . Точкой входа называется адрес в оперативной памяти, по которому хранится первая команда программы. На самом деле, функций в одной библиотеке может быть несколько и каждая из них имеет свою точку входа, к которой и обращается процесс, вызывающий определенную подпрограмму.

Таким образом, скомпоновав все вышеописанное в единое целое, мы можем раскрыть суть ошибки «Модуль загружен, но точка входа DLLRegisterServer входа не найдена». Эта проблема возникает при регистрации библиотеки в системе. Процесс «Regsvr32.exe», отвечающий за инсталлирование интерфейсов объектов в ОС, не может обнаружить функцию регистрации библиотеки «DLLRegisterServer» в проблемном dll.

  • Код функции, которая запрашивается программой, поврежден. Это может быть вызвано как некорректной версией регистрируемой вами библиотеки, так и вирусной атакой, испортившей код модуля, путь к библиотеке в реестре или ее идентификатор GUID.
  • Функция DLLRegisterServer может изначально отсутствовать в коде регистрируемой вами библиотеки;
  • Отсутствие в коде библиотеки интеграции с компонентами COM/ActiveX, управляющими реализацией dll в Windows;
  • Процесс регистрации вообще состоит в том, чтобы прописать путь к подключаемому модулю (модулям) в реестре Windows, для того, чтобы ОС могла «увидеть» библиотеку и оповестить программу, запрашивающую ее, о наличии или отсутствии определенного модуля в системе. Кроме того, каждому классу или объекту, входящему в состав подпрограммы, присваивается уникальный идентификатор GUID, он также необходим для регистрации, поскольку программы работают не с самими библиотеками dll, а с функциональными компонентами, входящими в ее состав. Это говорит о том, что при неправильной регистрации библиотеки значения, прописанные в реестре, останутся неверными, в результате ОС не сможет «опознать» библиотеку, чтобы ПО имело возможность подключить ее.

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

Исправляем проблему при которой модуль загружен, но точка входа DLLRegisterServer не найдена

Итак, для того чтобы самостоятельно справиться с проблемой “Модуль загружен, но точка входа DLLRegisterServer не найдена”, необходимо скачать библиотеку , которая была повреждена в результате действий вирусов или иных факторов. Ее название можно посмотреть в выскакивающем сообщении об ошибке.


Точка входа в библиотеку thumbcache.dll не найдена

Скачиваем библиотеки dll

Скачивая библиотеки, обязательно вначале уточните разрядность вашей версии Windows (х32/ х64). Если вы найдете и установите неподходящие файлы dll, ошибка “Модуль загружен, но точка входа DLLRegisterServer не найдена” исправлена не будет. Разместите скачанные вручную файлы в папках SysWOW64 и System32, находящихся C:\Windows.

Один очень важный нюанс – при скачивании библиотек dll никогда не пользуйтесь подозрительными ресурсами. Во-первых, данные с таких сайтов могут просто не подойти для вашей ОС (они часто представляют из себя усеченную версию нужного файла), а, во-вторых, вероятнее всего, они содержат вредоносный код, который не только не избавит вас от проблем, но еще и добавит новых. Всегда при малейшем подозрении проверяйте сайт (для этого существуют различные онлайн-сервисы), читайте отзывы и комментарии пользователей. Если скачанный файл dll не работает, возьмите его с другого ресурса.

Регистрируем библиотеки dll

В случае, когда библиотека на компьютере в полном порядке, но точка входа все равно не найдена, попробуем зарегистрировать dll в RegSvr32. Рассмотрим пути избавления от проблемы на основе вышеуказанного изображения. Регистрируем файл thumbcache.dll, находящийся C:\Windows\SysWOW64.
Первый способ – вызвать командную строку и ввести нужные данные:

  1. нажимаем win+x и находим в появившемся меню командную строку;
  2. после клика на последнюю появляется черное окно;
  3. после слова “Компьютер>” вводим слово regsvr32 и через пробел путь к проблемному файлу C:\Windows\SysWOW64\thumbcache.dll.

Регистрация библиотеки dll через командную строку

Нажимаем Enter и ждем окончания процесса регистрации библиотеки. Если данный метод не помогает, попробуйте повторить те же действия, но уже в командной строке от имени администратора. Возможно, вам не хватает прав для внесения изменений в систему.

Второй способ – использовать строку “Выполнить”:

  • нажимаем win+r и вызываем нужную нам строку;
  • в появившемся поле вводим название файла RegSvr32.exe и путь к отсутствующей библиотеке;
  • нажимаем OK и ждем результата.

Регистрируем dll через строку «Выполнить»

Устанавливаем обновления для Windows

Способ, к которому можно обращаться уже после того, как вышеуказанные методы не принесли желаемого результата – обновление компонентов вашей ОС. Для этого найдите на своем компьютере Центр обновления. Просмотрите все доступные обновления и прогрузите их. Процесс долгий, но необходимый. Быть может, проблема была в изначально неправильном коде dll-файлов, и разработчики уже нашли решение на своем уровне. Не выключайте соединение с интернетом и сам ПК во время установки обновлений, иначе результата не будет. Убедитесь, что все файлы прогружены и при необходимости повторите операцию.

Часто для исправления ошибки “Модуль загружен, но точка входа DLLRegisterServer не найдена” разработчики выпускают различное дополнительное ПО: моды, патчи, пакеты установки. В этом случае найдите и скачайте последнюю версию программного обеспечения, с которым у вас возникли проблемы. И напоследок о крайне нежелательном варианте – переустановке всей Windows. Конечно, этого без надобности не хочется делать никому, но, если система не открывает библиотеку dll, а все вышеуказанные методы уже испробованы, то сносите установленную и ставьте другую сборку ОС (из проверенных источников).

Ознакомьтесь с принципом работы этого метода. Чтобы зарегистрировать DLL-файл, можно использовать команду «regsvr» и имя DLL-файла (если файл поддерживает эту команду). Будет создан путь от реестра Windows к DLL-файлу, что упростит системе поиск и использование файла.

  • Как правило, этим методом пользуются для регистрации DLL-файлов, которые относятся к сторонним программ и которые напрямую взаимодействуют с системными утилитами (например, с командной строкой).

Уясните суть ошибки «entry point» (точка входа). Если DLL-файл уже зарегистрирован, он не поддерживает команду «regsvr» или его код не позволяет подключиться к реестру Windows, вы получите сообщение об ошибке «The module was loaded but the entry point DllRegisterServer was not found» (Модуль [имя DLL файла] загружен, но точка входа DllRegisterServer не найдена). Если на экране отобразилось такое сообщение, вы не сможете зарегистрировать DLL-файл.

  • Ошибка «точки входа» - это не столько проблема, сколько подтверждение того, что DLL-файл регистрировать не нужно.
  • Найдите DLL-файл, который вы хотите зарегистрировать. Перейдите в папку с нужным DLL-файлом и найдите его.

  • Откройте свойства DLL-файла. Щелкните правой кнопкой мыши по DLL-файлу и в меню выберите «Свойства». Откроется всплывающее окно.

    Найдите имя DLL-файла. В текстовом поле в верхней части окна «Свойства» вы найдете полное имя файла.

    • У большинства DLL-файлов сложные имена, поэтому оставьте окно «Свойства» открытым, чтобы скопировать имя позже.
  • Скопируйте путь к DLL-файлу. Удерживайте левую кнопку мыши и проведите указателем вдоль текста, который отображается в строке «Расположение», а затем нажмите Ctrl + C , чтобы скопировать путь к DLL-файлу.

    Найдите командную строку. Введите командная строка в строке поиска меню «Пуск». Значок командной строки отобразится в верхней части меню «Пуск».

    Откройте командную строку как администратор. Для этого:

  • Перейдите в каталог с DLL-файлом. Введите cd , нажмите на пробел, нажмите Ctrl + V , чтобы вставить путь к DLL-файлу, а затем нажмите ↵ Enter .

    • Например, если DLL-файл находится в папке «SysWOW64», которая расположена в папке «Windows», команда будет выглядеть так: cd C:\Windows\SysWOW64
  • Введите команду «regsvr» и имя DLL-файла. Введите regsvr32 , нажмите на пробел, введите имя DLL-файла (вместе с расширением.dll) и нажмите ↵ Enter . Если DLL-файл можно зарегистрировать, на экране появится подтверждение регистрации.

    • Например, если имя DLL-файла «usbperf.dll», команда будет выглядеть так: regsvr32 usbperf.dll
    • Чтобы скопировать имя DLL-файла, повторно откройте папку с DLL-файлом (откроется окно «Свойства»), выделите имя файла и нажмите Ctrl + C . Затем вставьте имя в командную строку - для этого нажмите Ctrl + V .
    • Если DLL-файл уже зарегистрирован или не может быть зарегистрирован, отобразится ошибка «точки входа», а не подтверждение регистрации.
  • Попробуйте отменить регистрацию DLL-файла, а потом перерегистрировать его. Если ввод команды «regsvr» приводит к ошибке, которая не является ошибкой «точки входа», отмените регистрацию DLL-файла, а затем перерегистрируйте его; для этого:

    • введите regsvr32 /u имя_файла.dll и нажмите ↵ Enter . Вместо «имя_файла» введите имя своего DLL-файла;
    • Введите regsvr32 имя_файла.dll и нажмите ↵ Enter . Вместо «имя_файла» введите имя своего DLL-файла.
  • Очень часто у юзеров возникает вопрос, как зарегистрировать DLL в седьмой или восьмой версии Windows. Как правило, этот вопрос появляется после того, как система сообщает пользователю, что на ПК отсутствует необходимая библиотека.

    По правде говоря, зарегистрировать библиотеку довольно просто – необходимо выполнить всего один шаг. Однако, для выполнения этого необходимо обладать правами администратора.

    Но в этом есть некоторые нюансы. К примеру, в случае успешной регистрации DLL ошибка отсутствия нужной библиотеки может не пропасть. Кроме того, может возникнуть ошибка RegSvr32 и уведомление, что модуль не способен работать на ПК с данной версией операционки. Также может сообщаться, что точка доступа DLLRegisterServer не обнаружена. Это не свидетельствует о том, что были выполнены неправильные действия.

    Три метода зарегистрировать DLL в ОС

    Все описанные ниже действия, подразумевают то, что место для копирования библиотеки было найдено и DLL расположен в директории System32 или SysWOW64 или в другом месте, где он должен быть.

    Все манипуляции по регистрации DLL будут выполняться с использованием regsvr32.exe, но тут необходимо обратить внимание, что при применении 64-битной системы этот файл может располагаться в двух директориях: SysWOW64 и System32. Стоит отметить, что эти файлы разные, при этом 64-бит располагается в директории System32. Рекомендуется в каждом случае писать путь к regsvr32.exe, а не только название файла.

    Первый метод довольно распространенный, и его можно часто встретить в интернете. Он состоит из нескольких манипуляций. Изначально необходимо нажать Win+R, а потом в окне «Выполнить» следует прописать regsvr32.exe путь_к_файлу_dll и нажать OK. Кроме того, «Выполнить» можно отыскать в меню «Пуск», если оно активировано.

    Затем, при удачном выполнении на экране должно появиться оповещение о том, что регистрация библиотеки прошла успешно. Однако, скорее всего, появится уведомление, что модуль загрузился, но точка доступа DllRegisterServer отсутствует и необходимо удостовериться, что DLL – нужный файл.

    Следующий метод подразумевает запуск строки команд под администратором и написания такой же команды, что и в вышеописанном методе. Нужно открыть строку команд. В «восьмерке» для этого нужно нажать Win+X, а потом указать необходимый пункт. В «семерке» строку команд можно отыскать в «Пуске». Требуется щелкнуть по ней ПКМ и указать «Запуск от имени администратора».

    Затем следует ввести regsvr32.exe путь_к_dll, как и в прошлом методе. Однако, регистрация, скорее всего, не пройдет.

    Кроме того, существует метод, который понадобится в редких случаях. Требуется щелкнуть ПКМ по DLL, подлежащей регистрации, и указать «Открыть с помощью». После этого следует кликнуть «Обзор» и в директориях System32 или SysWow64 отыскать regsvr32.exe, и с его помощью запустить DLL.

    В принципе, все варианты зарегистрировать DLL в операционке имеют одну и туже суть.
    Просто каждый пользователь сможет выбрать более удобный метод для себя. А вот почему не выходит провести регистрацию DLL, придется разбираться.

    Почему не проходит регистрация DLL

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

    Происходить это может по нескольким причинам. Во-первых, не каждый файл предназначен для регистрации. Чтобы выполнить регистрацию таким способом, нужен файл, который поддерживает функцию DllRegisterServer. В некоторых случаях ошибка выскакивает из-за того, что такой файл уже существует в системе.

    Во-вторых, некоторые ресурсы, предлагающие скачать этот файл, содержать пустышку с таким именем и провести его регистрацию невозможно, поскольку это не библиотека.

    Устранить эту проблему можно по-разному. Программистам при регистрации своей библиотеки можно использовать regasm.exe. Для обычных пользователей рекомендуется поискать, для чего необходим этот файл. Имея эту информацию, можно загрузить установщик, который инсталлирует все необходимые библиотеки и самостоятельно их зарегистрирует в операционке.

    К примеру, все файлы, которые начинаются на d3d, можно установить с помощью DirectX. А библиотеки msvc устанавливаются с помощью Visual Studio Redistributable. Если после скачивания с торрента какой-либо игры она не открывается, необходимо просмотреть отчеты антивируса, поскольку он мог ликвидировать измененные DLL.

    Зачастую, вместо того чтобы выполнять регистрацию библиотеки, можно использовать расположение DLL в одной директории с исполняемым файлом exe, который нуждается в этой библиотеке.

    Появляется сообщение, что не найден файл *.dll (например, VCompLib.dll ). При этом программа, естественно, не запускается.

    Сообщения об ошибках могут быть разные (это зависит в основном от того, на каком языке написана программа), например: «Component "MSCOMM32.OCX" not correctly registered: file is missing or invalid» , или «Приложению не удалось запуститься, поскольку MSVBVM50.DLL не был найден. Повторная установка приложения может исправить эту проблему» , или «Runtime DLL/OCX File error» . При этом может появиться окно Помощника по совместимости программ с сообщением Эта программа требует отсутствующий компонент Windows .

    Способы решения проблемы

    Если возникают ошибки, связанные с файлами *.dll , необходимо:

    1. Переустановить программу.

    2. Если переустановка программы не помогает, нужно проверить наличие в системе требуемых файлов.

    Файлы *.dll , как правило, должны быть расположены в папке \Windows\System32 (реже – в каталоге конкретной программы). Если файлы присутствуют, нужно зарегистрировать их.

    Если требуемых файлов нет, найдите их в Интернете, скачайте и скопируйте в папку \Windows\System32 и в каталог программы. Теперь нужно зарегистрировать их.

    Как зарегистрировать файлы *.dll

    Регистрация файлов *.dll производится с помощью сервера регистрации regsvr32.exe (дисковый адрес которого – \Windows\System32 ).

    Рассмотрим способы регистрации:

    1. Нажмите кнопку Пуск ;

    – в текстовое поле Найти программы и файлы введите regsvr32 имя_файла –> Enter .

    2. Нажмите кнопку Пуск ;

    – в текстовое поле Найти программы и файлы введите cmd ;

    – в появившемся перечне (под заголовком Программы ) нажмите правой кнопкой cmd.exe ;

    – из контекстного меню выберите Запуск от имени администратора ;

    – введите пароль, если появится соответствующий запрос;

    – в открывшемся окне после приглашения системы введите regsvr32 имя_файл , нажмите Enter .

    3. Если вы пользуетесь файловым менеджером Total Commander , то можно выполнить регистрацию файлов *.dll с помощью командной строки Total Commander .

    Если регистрация файлов *.dll прошла успешно, появится окно RegSvr32 с соответствующим сообщением, например: «Успешное выполнение DllRegisterServer в C:\WINDOWS\system32\msvbvm50.dll» :


    Примечания

    1. При регистрации файлов *.dll происходит их запись в Реестр Windows . При этом в ветке создается соответствующий параметр REG_DWORD со значением 1 .

    2. Использование команды regsvr32 :

    regsvr32 ] DLL-файл

    /u – отменяет регистрацию DLL ;

    /s – «тихий» режим – окна сообщений не отображаются;

    /i – вызывает DllInstall , передавая параметром необязательную строку_команд, при использовании с ключом /u вызывает DLLUnInstall ;