Регистрация компонентов системы из RegSvr32.

Регистрация компонентов системы из RegSvr32.

03.06.2020 1 Автор GodKnowses

Всякий раз, теряя после проверки антивирусом или очередного обновления некий файл.dll, мы первым делом шерстим интернет в поиске нужной нам версии. При этом нередко ресурсы от раздающих файлы сопровождаются советами об обязательной регистрации его компонентов в реестре. Логика советчиков проста – без регистрации (или после повреждения точек входа) в реестре функции программы для Windows просто будут недоступны. Но все ли из вас понимают смысл процедуры и обязательность к её применению? В статье я хотел бы частично покрыть проблему, возникающую на данном этапе.

перерегистрация файлов dll

Что за RegSvr32?

RegSvr32 – консольная утилита Windows, позволяющая проводить регистрацию (равно как и аннулировать её) у объектов связывания/внедрения. “Под замес”, таким образом, попадают некоторые DLL и ActiveX-управляющие элементы – программируемые компоненты-приложения с интерфейсом на базе OLE, позволяющие включать их в другие программы или приложения. С незапамятных времён они называются ActiveX элементы или “контрольки ActiveX”. Регистрация используется для добавления информации в центральную директорию Windows (то бишь реестр). Информация чаще всего включает в себя “дружественное” название этого компонента, что делает его “более привлекательным” для других приложений, которые могут или будут точно его использовать. Там также есть его полное название и путь к самому файлу, который содержит в себе исполняющий код. Из него Windows и узнаёт о специальных и доступных функциях компонента, а также о том, как эти функции запускать (обращаться за исполнением кода). Нередко регистрация крутится вокруг проблем совместимости с версиями ОС одного производителя, но разных поколений. Ведь информация в реестре Windows всегда будет содержать в себе данные именно о последней версии компонента. Windows за этим, кстати, следит очень трепетно: у компонента версия может только одна. И традиционно, если какая-то функция Windows обнаруживала свою недееспособность, пользователю всегда была доступна процедура регистрации или отмены регистрации сервера таких элементов. На самом деле, такая “деятельность” редко присуща конечным пользователям. Это дела разрабов ПО, но здесь Microsoft явно пошла нам навстречу, оставив возможность изменить отношение системы к какой-то программе вручную. С нашей помощью и помощью RegSvr32.

Порядок пере/регистрации элемента

Вы всегда можете попытаться провести ручную регистрацию DLL или OCX файлов из командной строки от имени администратора:

regsvr32 путь-к-файлу/имя-файла

Обратная операция выполняется с добавлением флага u:

regsvr32 /u путь-к-файлу/имя-файла

Суть обеих операций – обращение к серверам DllRegisterServer / DllUnregisterServer внутри этих DLL с целью зарегистрировать файл или удалить сведения о нём из реестра. Т.е. создавая в реестре новые пути или, наоборот, удаляя их из него.

Ошибка RegSvr32

У вас 32-х или 64-х разрядная версия?

Здесь путаница в использовании собственных средств системы будет жить, думаю, вечно. Наиболее частая в нашем случае связана именно с попыткой регистрации 32-х битного приложения в 64-битной Windows. Но здесь всё просто. Если вам нужно зарегистрировать библиотечку 32-х в 64-х битной Windows, команда регистрации через regsvr32 примет вид:

%systemroot%\SysWoW64\regsvr32 путь-к-файлу/имя-файла

Мы, таким образом, заставляем консоль “заработать утилиту” из папки, которая, несмотря на своё название (SysWoW64), как раз и работает с 32-х битными версиями программ. Но стоит ли подключать к решению проблемы с Windows регистратор RegSvr32?

И правда, надо ли?

Сам факт того, что файл имеет расширение .dll не означает обязательную его регистрацию. Более того, вполне вероятно, что этот процесс для него не присущ. Если внутри его нет функции DllRegisterServer, утилита regsvr32 вообще не поймёт что с ним делать. В общем, с такой ситуацией вы сталкиваетесь именно в тот момент, когда видите сообщение типа:

Модуль ” * ” загружен, но точка точка входа не найдена…

модуль загружен но точка входа не найдена

Были времена когда вместо традиционного для такой “ошибки” окна появлялось игривое сообщение типа “Зачем вы пытаетесь зарегистрировать этот DLL ? Это обычный файл DLL Windows, который не требует регистрации”. Или его американский вариант “Why are you trying to register this DLL? It’s an ordinary Windows DLL, there’s nothing to be registered”. И серьёзным подспорьем пользователю в этом вопросе могла бы послужить программа DLL Export Viewer от NirSoft, с помощью которой можно было бы проверить наличие серверов DllRegisterServer и DllUnRegisterServer в собственной библиотеке. Возьмём пример DLL-файла из рисунка, заявляющего о невозможности зарегистрировать пресловутый steam_api.dll:

содержание steam api

а где же сервера?

Как видите сами, у файла и возможности-то такой нет. В отличие, например, от этого:

dllregisterserver

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

  • “регистрируем через regsvr32” – это невозможно, и мы уже поняли почему;
  • “попробуйте запустить приложение из другой учётной записи”, создав ту заново – а что, функция в DLL-файле волшебным образом появится заново? Если ошибка не связана с правами доступа, это не поможет. Windows ведь одна на всех.
  • “попробуйте чистую загрузку Windows” – да регистрации не мешают другие программы и драйвера;
  • “чиним систему через sfc /scannow” – от этого инструмента, как он ни хорош, ждать много в нашем случае не приходится. К сожалению, вручную прописать функции сервера он не сможет, доступа к сторонним файлам у него нет.

Так в чём проблема?

В вашем случае – не смею догадываться. Однако на моём опыте это был почти всегда либо кривой либо несовместимый с данной версией Windows файл. Нередко с этой проблемой будут сталкиваться пользователи именно Windows 10, для большинства из которых W10 – целостная система, время от времени изменяющая свой вид. Ан нет. С полугодичными обновлениями мы получаем зачастую именно обновлённую систему. Со всеми вытекающими – старые версии файлов аннулируются, а прежние функции отпадают либо обновляются вплоть до невозможности запускать на их базе некоторые другие, сторонние программы. Звучит крутовато, но уже простите. Вариант решения проблемы с самим файлом частично предложен в статье Что такое dll, и почему их в Windows не хватает? Однако вопрос с “ошибкой” регистрации вас волновать в описанной форме более, думаю, не должен.

Успехов.