Регистрация dll зачем нужна
Итак, с целью спрятать пароль подключения к базе данных (поверхностное шифрование) у меня дошли руки к созданию Active-X библиотеки.
Благодаря замечательной статье COM в действии Catstail-a все удалось с первого раза.
За исключением проблем при регистрации DLL через Regsvr32, которой обычных прав оказалось недостаточно,
ведь она записывает значения в реестр в ветку HKLM.
А как известно, без регистрации подключить библиотеку к проекту ни поздним, ни ранним связыванием не получится.
Выходов из ситуации было 2:
1) Делать установщик, которому прописывать манифест повышенных прав (иконка со щитом), либо повторный запуск процесса от имени другого пользователя через runas. В любом случае буду получать предупреждения системы защиты.
2) Прописать вручную ветки реестра для текущего пользователя (HKCU), т.к. утилита Regsvr32 такой роскоши нам не дает.
Вторым способом я и занялся.
Шаг 2. Получение ключей реестра.
Вторая часть статьи Catstail-а описывает, кроме всего прочего особенности хранения ключей в реестре при регистрации DLL, а также в приложении программу, которая находит в реестре GUID, CLSID, Inerface и TypeLib-ы созданного класса.
Но все же я решил вручную просканировать изменения в реестре (для этого воспользовался бесплатной программой RegShot).
Windows Registry Editor Version 5.00
[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\Calc.myCalc]
@="Calc.myCalc"
[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\ Wow6432Node\CLSID \]
@="Calc.myCalc"
[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\ Wow6432Node\CLSID \\Implemented Categories]
[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\ Wow6432Node\CLSID \\InprocServer32]
@="C:\\Users\\Alex\\Desktop\\ActXTest\\Calc.dll"
"ThreadingModel"="Apartment"
[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\ Wow6432Node\CLSID \\ProgID]
@="Calc.myCalc"
[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\ Wow6432Node\CLSID \\Programmable]
[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\ Wow6432Node\CLSID \\VERSION]
@="1.0"
[HKEY_LOCAL_MACHINE\SOFTWARE\ Wow6432Node\Classes\CLSID \]
@="Calc.myCalc"
[HKEY_LOCAL_MACHINE\SOFTWARE\ Wow6432Node\Classes\CLSID \\Implemented Categories]
[HKEY_LOCAL_MACHINE\SOFTWARE\ Wow6432Node\Classes\CLSID \\InprocServer32]
@="C:\\Users\\Alex\\Desktop\\ActXTest\\Calc.dll"
"ThreadingModel"="Apartment"
[HKEY_LOCAL_MACHINE\SOFTWARE\ Wow6432Node\Classes\CLSID \\ProgID]
@="Calc.myCalc"
[HKEY_LOCAL_MACHINE\SOFTWARE\ Wow6432Node\Classes\CLSID \\Programmable]
[HKEY_LOCAL_MACHINE\SOFTWARE\ Wow6432Node\Classes\CLSID \\VERSION]
@="1.0"
[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\ TypeLib \\1.0\0\win32]
@="C:\\Users\\Alex\\Desktop\\ActXTest\\Calc.dll"
[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\ TypeLib \\1.0\HELPDIR]
@="C:\\Users\\Alex\\Desktop\\ActXTest"
Для работы DLL на самом деле используются значения ключей в ветке HKEY_CLASSES_ROOT (HKCR)
Математика такая:
HKCR получается путем сложения ключей, которые находятся в ветках HKLM + HKCU.
Если ветка HKCU содержит другие значения, чем HKLM, то HKCU имеет приоритет.
Шаг 3. Модификация ключей Reg-файла.
Делаем автозамену веток HKEY_LOCAL_MACHINE на HKEY_CURRENT_USER
-
Отменяем регистрацию DLL:
Шаг 4. Избавляемся от лишних ссылок на 32-битные ветки реестра в Reg-файле
Как можно заметить из содержимого Reg-файла, система у меня х64-битная. И это Windows 7 с максимальным уровнем защиты UAC.
Итак, сервер регистрации прописал DLL в реестре на все случаи.
Но зачем?
Не секрет, что в 64-х системах существует механизм переадресации запросов 32-битных приложений в ветку Wow6432Node. Процесс чем-то схожий с файловыми переадресациями, о которых я не так давно писал в этой теме.
По этому вопросу есть неплохая статья от Jochen Kalmbach.
Итак, удаляем дублирующие ветки реестра из Reg-файла, а в остальных удаляем часть "Wow6432Node\":
[HKEY_LOCAL_MACHINE\SOFTWARE\ Wow6432Node\Classes\CLSID \]
@="Calc.myCalc"
[HKEY_LOCAL_MACHINE\SOFTWARE\ Wow6432Node\Classes\CLSID \\Implemented Categories]
[HKEY_LOCAL_MACHINE\SOFTWARE\ Wow6432Node\Classes\CLSID \\InprocServer32]
@="C:\\Users\\Alex\\Desktop\\ActXTest\\Calc.dll"
"ThreadingModel"="Apartment"
[HKEY_LOCAL_MACHINE\SOFTWARE\ Wow6432Node\Classes\CLSID \\ProgID]
@="Calc.myCalc"
[HKEY_LOCAL_MACHINE\SOFTWARE\ Wow6432Node\Classes\CLSID \\Programmable]
[HKEY_LOCAL_MACHINE\SOFTWARE\ Wow6432Node\Classes\CLSID \\VERSION]
Одно но! После такой экзекуции, нам нельзя вручную (двойным кликом) вносить Reg-файл в реестр.
Система примет такой запрос как от имени х64-процесса и переадресация не сработает.
Поэтому нам нужно это делать из любого 32-битного приложения, коим есть VB6, например так:
Команда выполнялась под учетной записью с ограниченными правами,
а также успешно испытана на свежеустановленной Windows XP x32-bit.
В приложении: скомпилированная библиотека, Reg-файл, Excel-файл и VB-проект (на выбор) с Shell-ом регистрации и процедурой вызова методов и свойств объекта Calc.dll.
VBS-скрипт у меня не заработал , не знаю почему.
Для корректной регистрации
Windows Registry Editor Version 5.00
[HKEY_CURRENT_USER\SOFTWARE\Classes\CLSID\\InprocServer32]
@= "C:\\Users\\Alex\\Desktop\\ActXTest\\Calc.dll"
"ThreadingModel"="Apartment"
[HKEY_CURRENT_USER\SOFTWARE\Classes\TypeLib\\1.0\0\win32]
@= "C:\\Users\\Alex\\Desktop\\ActXTest\\Calc.dll"
[HKEY_CURRENT_USER\SOFTWARE\Classes\TypeLib\\1.0\HELPDIR]
@= "C:\\Users\\Alex\\Desktop\\ActXTest"
"C:\\Users\\Alex\\Desktop\\ActXTest"
на месторасположение файла Calc.dll на Вашем компьютере, на забывая при этом про двойные слеши \\.
Стоит заметить, что при перекомпиляции DLL в среде VB6 происходит автоматическая регистрация библиотеки. Кроме того, все GUID и др. значения изменяются. Т.о. Reg-файл нужно создавать заново.
В дальнейшем если версия DLL будет меняться планирую автоматизировать весь этот процесс написанием программы. Благо, исходник сканера уже есть
Может конечно вся статья и зря, и есть более простой способ зарегистрировать Active-X Dll в среде текущего пользователя. С удовольствием выслушаю Ваши варианты и комментарии.
Запуск от администратора без вызова UAC
привет всем , у меня проблема : моему файлу ничего нельзя делать в директории Program files. можно.
Запуск программы без прав администратора скриптом, запущенным с правами администратора
Добрый день. Запускаю скрипт с правами администратора. Тот в свою очередь запускает программу, как.
Перед использованием некоторых DLL систему необходимо “проинформировать” о том, какой файл добавлен в систему, что он делает и из чего состоит. Без этих сведений файлом будет пользоваться сложнее, а зачастую некоторые возможности останутся закрытыми.
Видео
Надеюсь, цель достигнута, а количество вопросов, связанных с регистрацией DLL в Windows, уменьшилось.
Исправление ошибки
Существует несколько ее способов:
- Попробовать переустановить приложение.
- В том случае, когда предыдущее действие не помогло, нужно проверить непосредственно сами библиотеки dll. Сведения об этом расположены в папке system32, зайти в которую можно из директории Windows диска C. Если необходимый файл не будет обнаружен, то нужно будет сначала скачать его, а затем переместить сюда.
После того как нужная библиотека оказалась на компьютере, нужно скопировать ее в system32, и далее необходима регистрация dll.
Что такое DL_
Одним из способов уменьшения размеров DLL-файлов является сжатие неиспользуемых библиотек. Microsoft делает это с помощью службы MakeCAB, именно благодаря ей также происходит обратная “распаковка”.
Почему не удается зарегистрировать DLL
Ошибка при регистрации с помощью regsvr32 вида «Точка входа DllRegisterServer не найдена» говорит о том, что эта библиотека DLL не поддерживает регистрацию описанным методом. Можно попробовать использовать вариант команды:
но с большой вероятностью и это не поможет.
У большинства домашних пользователей такая проблема возникает при регистрации файлов DLL для игр и программ, часто не вполне лицензионных, которые сообщили, что нужный файл DLL не обнаружен или отсутствует. Причем сами библиотеки DLL обычно скачаны со сторонних сайтов (и чаще всего имеют имена начинающиеся с «vc», «msvc» или «d3d»). А решение, как правило, простое — выяснить, частью какого набора компонентов является эта DLL и установить эти компоненты с помощью их собственного установщика. Более подробно проблема и подходы к решению описаны в инструкции Точка входа DllRegisterServer не найдена — причины и возможные решения.
Первый способ регистрации DLL
Перед началом регистрации стоит сделать ремарку и сказать, что способов всего три, но каждый из них практически аналогичен остальным, так что советуем дочитать статью до конца, после чего сделать выбор, каким способом пользоваться. Ну а теперь перейдем непосредственно к тому, как зарегистрировать DLL.
Изначально стоит сказать, что все манипуляции с регистрацией DLL-файла стоит проводить лишь в том случае, когда этот самый файл находится там, где он должен быть. Чаще всего это папка system32. В примере именно эту папку мы и будем представлять.
Сейчас поговорим о самом распространенном способе, как можно зарегистрировать DLL, по крайней мере, он в интернете встречается чаще всего. Он довольно прост, так что у пользователя не должен вызывать проблем.
- Вам нужно попасть в окно "Выполнить". Его можно открыть несколькими путями. В меню "Пуск" пройти по пути "Все программы → Стандартные" и там уже выбрать "Выполнить". Можно также в том же меню "Пуск" совершить поиск с названием утилиты. Но самый простой способ - это нажать клавиши Win+R.
- Когда окно открыто, в поле для ввода нужно прописать команду "regsvr32.exe", после этого указать путь к файлу, который нужно зарегистрировать.
- Осталось нажать лишь кнопку "ОК".
Просим обратить внимание на то, что путь к файлу должен указываться полностью. Начиная с диска C. Например: regsvr32.exe c: windows /system32/openal32.dll.
Это был первый способ, как зарегистрировать DLL, но напоминаем, что их всего три, поэтому двигаемся дальше.
Зачем нужны библиотеки и какую роль они выполняют?
Для начала стоит разобраться в том, что представляет собой этот файл и для чего он нужен. На самом деле, dll – это динамически подключаемая библиотека, именно так переводится данная английская аббревиатура. То есть с помощью такого средства операционной системой предоставляется возможность запускать и пользоваться различными приложениями много раз.
В такую библиотеку входит система ActiveX и разные драйвера. Стоит отметить, что по мере появления новых ОС, dll также менялся, хотя регистрация dll в windows 7 мало чем отличается от подобного процесса в windows xp. Изначально такие библиотеки использовались для сохранения занимаемого размера на жестком диске, так как в годы начального развития компьютеров объем их дискового пространства не отличался вместительностью. В файлы "*.dll" входила составляющая, которая представляла собой специальный библиотечный модуль для различных приложений, работающих в ОС. Таким образом, несколько программ могли использовать один и тот же файл для своей работы. Именно поэтому регистрация библиотек dll настолько важна для общей работы всего компьютера. Позже компания Microsoft разработала некую модульную систему применения, смысл которой заключался в том, что модули взаимозаменяемы, и предоставляется возможность для организации работы совершенно разных приложений.
Как узнать, какая программа использует DLL
Одним и тем же файлом DLL может одновременно пользоваться несколько программ. Это вызывает проблемы, например, в случае необходимости удалить файл из системы.
Что делать, если “Точка входа не найдена”
Такая ошибка чаще всего возникает при несовпадении версии dll файла и версии приложения, которое ее использует. Одной из частых причин может быть неправильная установка пакетов Visual C++.
Одним из самых популярных способов является переустановка программы или системы, однако можно решить проблему кудаа менее радикально. Для начала необходимо определить, какой именно 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
Второй способ практически ничем не отличается, лишь местом действий. Вам нужно попасть в утилиту "Командная строка", сделать это можно также несколькими способами: или в меню "Пуск" в папке стандартные открыть одноименную программу, или вызвав окно "Выполнить", ввести команду "cmd". Решать только вам.
Теперь перед вами открыта командная строка, в ней нужно ввести абсолютно такие же данные, которые вводились в первом способе. То есть изначально указать программу, которая будет работать с dll (regsvr32.exe), а затем путь к файлу.
Как видим, второй способ, как зарегистрировать DLL, практически ничем не отличается от первого, о чем и говорилось в начале статьи. Но вот третий имеет более заметные отличия, поэтому перейдем к нему.
Как найти DLL-файл на компьютере
Зачастую требуется определить местонахождение того или иного DLL-файла на компьютере, например, для определения его полного адреса при удалении из системы.
Третий способ регистрации DLL
Этот способ, скорее всего, окажется более простым для рядового пользователя, поэтому начнем его рассматривать.
Вам необходимо всего-навсего открыть DLL-файл с помощью regsvr32.exe. Вот как это сделать:
- На нужном DLL-файле нажмите ПКМ.
- В меню выберите "Открыть с помощью. ".
- В окошке найдите и нажмите кнопку "Обзор".
- Проложите путь к файлу regsvr32.exe, он находится в папке System32, которая находится в папке Windows на диске C.
- Нажмите "Открыть".
Вот и все, теперь вы знаете аж три способа, что нужно делать, когда появляется ошибка DLL.
Как узнать, какая программа использует DLL
Одним и тем же файлом DLL может одновременно пользоваться несколько программ. Это вызывает проблемы, например, в случае необходимости удалить файл из системы.
Читайте также:
- Ведение регистров в электронном виде с применением усиленной квалифицированной электронной подписи
- Состояние компьютера предположительно без защиты что делать
- Подключение заблокировано вследствие превышения лимита времени teamviewer
- Информация в ней находится только во время работы компьютера это что
- Rtx 3080 температура памяти