![]() ![]() ![]() |
|||||||||||||||||||||
1 | |||||||||||||||||||||
Регистрация ActiveX-DLL без прав администратора (UAC включен)10.09.2012, 02:37. Показов 26093. Ответов 16
Метки activex dll регистрация (Все метки)
Итак, с целью спрятать пароль подключения к базе данных (поверхностное шифрование) у меня дошли руки к созданию Active-X библиотеки.
Благодаря замечательной статье COM в действии Catstail-a все удалось с первого раза. За исключением проблем при регистрации DLL через Regsvr32, которой обычных прав оказалось недостаточно, ведь она записывает значения в реестр в ветку HKLM. А как известно, без регистрации подключить библиотеку к проекту ни поздним, ни ранним связыванием не получится. Выходов из ситуации было 2: 1) Делать установщик, которому прописывать манифест повышенных прав (иконка со щитом), либо повторный запуск процесса от имени другого пользователя через runas. В любом случае буду получать предупреждения системы защиты. 2) Прописать вручную ветки реестра для текущего пользователя (HKCU), т.к. утилита Regsvr32 такой роскоши нам не дает. Вторым способом я и занялся. Шаг 1. Регистрация DLL с правами администратора, например через (.cmd) Batch-файл, или через запуск консоли CMD в строке поиска Ctrl+Shift+Enter.
Вторая часть статьи 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\Calc.myCalc\Clsid] @="{54319578-F5A1-4BEF-B8A4-20E6F89ABB4A}" [HKEY_LOCAL_MACHINE\SOFTWARE\Classes\Wow6432Node\CLSID\{54319578-F5A1-4BEF-B8A4-20E6F89ABB4A}] @="Calc.myCalc" [HKEY_LOCAL_MACHINE\SOFTWARE\Classes\Wow6432Node\CLSID\{54319578-F5A1-4BEF-B8A4-20E6F89ABB4A}\Implemented Categories] [HKEY_LOCAL_MACHINE\SOFTWARE\Classes\Wow6432Node\CLSID\{54319578-F5A1-4BEF-B8A4-20E6F89ABB4A}\Implemented Categories\{40FC6ED5-2438-11CF-A3DB-080036F12502}] [HKEY_LOCAL_MACHINE\SOFTWARE\Classes\Wow6432Node\CLSID\{54319578-F5A1-4BEF-B8A4-20E6F89ABB4A}\InprocServer32] @="C:\\Users\\Alex\\Desktop\\ActXTest\\Calc.dll" "ThreadingModel"="Apartment" [HKEY_LOCAL_MACHINE\SOFTWARE\Classes\Wow6432Node\CLSID\{54319578-F5A1-4BEF-B8A4-20E6F89ABB4A}\ProgID] @="Calc.myCalc" [HKEY_LOCAL_MACHINE\SOFTWARE\Classes\Wow6432Node\CLSID\{54319578-F5A1-4BEF-B8A4-20E6F89ABB4A}\Programmable] [HKEY_LOCAL_MACHINE\SOFTWARE\Classes\Wow6432Node\CLSID\{54319578-F5A1-4BEF-B8A4-20E6F89ABB4A}\TypeLib] @="{4D922142-997D-4403-A002-2387BCF4A07F}" [HKEY_LOCAL_MACHINE\SOFTWARE\Classes\Wow6432Node\CLSID\{54319578-F5A1-4BEF-B8A4-20E6F89ABB4A}\VERSION] @="1.0" [HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Classes\CLSID\{54319578-F5A1-4BEF-B8A4-20E6F89ABB4A}] @="Calc.myCalc" [HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Classes\CLSID\{54319578-F5A1-4BEF-B8A4-20E6F89ABB4A}\Implemented Categories] [HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Classes\CLSID\{54319578-F5A1-4BEF-B8A4-20E6F89ABB4A}\Implemented Categories\{40FC6ED5-2438-11CF-A3DB-080036F12502}] [HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Classes\CLSID\{54319578-F5A1-4BEF-B8A4-20E6F89ABB4A}\InprocServer32] @="C:\\Users\\Alex\\Desktop\\ActXTest\\Calc.dll" "ThreadingModel"="Apartment" [HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Classes\CLSID\{54319578-F5A1-4BEF-B8A4-20E6F89ABB4A}\ProgID] @="Calc.myCalc" [HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Classes\CLSID\{54319578-F5A1-4BEF-B8A4-20E6F89ABB4A}\Programmable] [HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Classes\CLSID\{54319578-F5A1-4BEF-B8A4-20E6F89ABB4A}\TypeLib] @="{4D922142-997D-4403-A002-2387BCF4A07F}" [HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Classes\CLSID\{54319578-F5A1-4BEF-B8A4-20E6F89ABB4A}\VERSION] @="1.0" [HKEY_LOCAL_MACHINE\SOFTWARE\Classes\Interface\{25E88292-036E-479D-B010-82EFB67A1001}] @="_myCalc" [HKEY_LOCAL_MACHINE\SOFTWARE\Classes\Interface\{25E88292-036E-479D-B010-82EFB67A1001}\ProxyStubClsid32] @="{00020424-0000-0000-C000-000000000046}" [HKEY_LOCAL_MACHINE\SOFTWARE\Classes\Interface\{25E88292-036E-479D-B010-82EFB67A1001}\TypeLib] @="{4D922142-997D-4403-A002-2387BCF4A07F}" "Version"="1.0" [HKEY_LOCAL_MACHINE\SOFTWARE\Classes\TypeLib\{4D922142-997D-4403-A002-2387BCF4A07F}] [HKEY_LOCAL_MACHINE\SOFTWARE\Classes\TypeLib\{4D922142-997D-4403-A002-2387BCF4A07F}\1.0] @="Calc" [HKEY_LOCAL_MACHINE\SOFTWARE\Classes\TypeLib\{4D922142-997D-4403-A002-2387BCF4A07F}\1.0\0] [HKEY_LOCAL_MACHINE\SOFTWARE\Classes\TypeLib\{4D922142-997D-4403-A002-2387BCF4A07F}\1.0\0\win32] @="C:\\Users\\Alex\\Desktop\\ActXTest\\Calc.dll" [HKEY_LOCAL_MACHINE\SOFTWARE\Classes\TypeLib\{4D922142-997D-4403-A002-2387BCF4A07F}\1.0\FLAGS] @="0" [HKEY_LOCAL_MACHINE\SOFTWARE\Classes\TypeLib\{4D922142-997D-4403-A002-2387BCF4A07F}\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 И убеждаемся, что у нас все работает:
Ошибок чаще всего бывает две: 1) Automation error. Не найден указанный модуль. - Это значит, что библиотека зарегистрирована, но указано неверное расположение файла DLL, либо он был переименован. 2) ActiveX component can't create object - DLL не зарегистрирована, или зарегистрирована некорректно. Шаг 4. Избавляемся от лишних ссылок на 32-битные ветки реестра в Reg-файле Как можно заметить из содержимого Reg-файла, система у меня х64-битная. И это Windows 7 с максимальным уровнем защиты UAC. Итак, сервер регистрации прописал DLL в реестре на все случаи. Но зачем? Не секрет, что в 64-х системах существует механизм переадресации запросов 32-битных приложений в ветку Wow6432Node. Процесс чем-то схожий с файловыми переадресациями, о которых я не так давно писал в этой теме. По этому вопросу есть неплохая статья от Jochen Kalmbach. Итак, удаляем дублирующие ветки реестра из Reg-файла, а в остальных удаляем часть "Wow6432Node\": Эти ветки нам не нужны:
[HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Classes\CLSID\{54319578-F5A1-4BEF-B8A4-20E6F89ABB4A}] @="Calc.myCalc" [HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Classes\CLSID\{54319578-F5A1-4BEF-B8A4-20E6F89ABB4A}\Implemented Categories] [HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Classes\CLSID\{54319578-F5A1-4BEF-B8A4-20E6F89ABB4A}\Implemented Categories\{40FC6ED5-2438-11CF-A3DB-080036F12502}] [HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Classes\CLSID\{54319578-F5A1-4BEF-B8A4-20E6F89ABB4A}\InprocServer32] @="C:\\Users\\Alex\\Desktop\\ActXTest\\Calc.dll" "ThreadingModel"="Apartment" [HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Classes\CLSID\{54319578-F5A1-4BEF-B8A4-20E6F89ABB4A}\ProgID] @="Calc.myCalc" [HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Classes\CLSID\{54319578-F5A1-4BEF-B8A4-20E6F89ABB4A}\Programmable] [HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Classes\CLSID\{54319578-F5A1-4BEF-B8A4-20E6F89ABB4A}\TypeLib] @="{4D922142-997D-4403-A002-2387BCF4A07F}" [HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Classes\CLSID\{54319578-F5A1-4BEF-B8A4-20E6F89ABB4A}\VERSION] Одно но! После такой экзекуции, нам нельзя вручную (двойным кликом) вносить Reg-файл в реестр. Система примет такой запрос как от имени х64-процесса и переадресация не сработает. Поэтому нам нужно это делать из любого 32-битного приложения, коим есть VB6, например так:
а также успешно испытана на свежеустановленной Windows XP x32-bit. В приложении: скомпилированная библиотека, Reg-файл, Excel-файл и VB-проект (на выбор) с Shell-ом регистрации и процедурой вызова методов и свойств объекта Calc.dll. VBS-скрипт у меня не заработал ![]() Для корректной регистрации измените в Reg-файле путь
Windows Registry Editor Version 5.00
[HKEY_CURRENT_USER\SOFTWARE\Classes\Calc.myCalc] @="Calc.myCalc" [HKEY_CURRENT_USER\SOFTWARE\Classes\Calc.myCalc\Clsid] @="{54319578-F5A1-4BEF-B8A4-20E6F89ABB4A}" [HKEY_CURRENT_USER\SOFTWARE\Classes\CLSID\{54319578-F5A1-4BEF-B8A4-20E6F89ABB4A}] @="Calc.myCalc" [HKEY_CURRENT_USER\SOFTWARE\Classes\CLSID\{54319578-F5A1-4BEF-B8A4-20E6F89ABB4A}\Implemented Categories] [HKEY_CURRENT_USER\SOFTWARE\Classes\CLSID\{54319578-F5A1-4BEF-B8A4-20E6F89ABB4A}\Implemented Categories\{40FC6ED5-2438-11CF-A3DB-080036F12502}] [HKEY_CURRENT_USER\SOFTWARE\Classes\CLSID\{54319578-F5A1-4BEF-B8A4-20E6F89ABB4A}\InprocServer32] @="C:\\Users\\Alex\\Desktop\\ActXTest\\Calc.dll" "ThreadingModel"="Apartment" [HKEY_CURRENT_USER\SOFTWARE\Classes\CLSID\{54319578-F5A1-4BEF-B8A4-20E6F89ABB4A}\ProgID] @="Calc.myCalc" [HKEY_CURRENT_USER\SOFTWARE\Classes\CLSID\{54319578-F5A1-4BEF-B8A4-20E6F89ABB4A}\Programmable] [HKEY_CURRENT_USER\SOFTWARE\Classes\CLSID\{54319578-F5A1-4BEF-B8A4-20E6F89ABB4A}\TypeLib] @="{4D922142-997D-4403-A002-2387BCF4A07F}" [HKEY_CURRENT_USER\SOFTWARE\Classes\CLSID\{54319578-F5A1-4BEF-B8A4-20E6F89ABB4A}\VERSION] @="1.0" [HKEY_CURRENT_USER\SOFTWARE\Classes\Interface\{25E88292-036E-479D-B010-82EFB67A1001}] @="_myCalc" [HKEY_CURRENT_USER\SOFTWARE\Classes\Interface\{25E88292-036E-479D-B010-82EFB67A1001}\ProxyStubClsid32] @="{00020424-0000-0000-C000-000000000046}" [HKEY_CURRENT_USER\SOFTWARE\Classes\Interface\{25E88292-036E-479D-B010-82EFB67A1001}\TypeLib] @="{4D922142-997D-4403-A002-2387BCF4A07F}" "Version"="1.0" [HKEY_CURRENT_USER\SOFTWARE\Classes\TypeLib\{4D922142-997D-4403-A002-2387BCF4A07F}] [HKEY_CURRENT_USER\SOFTWARE\Classes\TypeLib\{4D922142-997D-4403-A002-2387BCF4A07F}\1.0] @="Calc" [HKEY_CURRENT_USER\SOFTWARE\Classes\TypeLib\{4D922142-997D-4403-A002-2387BCF4A07F}\1.0\0] [HKEY_CURRENT_USER\SOFTWARE\Classes\TypeLib\{4D922142-997D-4403-A002-2387BCF4A07F}\1.0\0\win32] @="C:\\Users\\Alex\\Desktop\\ActXTest\\Calc.dll" [HKEY_CURRENT_USER\SOFTWARE\Classes\TypeLib\{4D922142-997D-4403-A002-2387BCF4A07F}\1.0\FLAGS] @="0" [HKEY_CURRENT_USER\SOFTWARE\Classes\TypeLib\{4D922142-997D-4403-A002-2387BCF4A07F}\1.0\HELPDIR] @="C:\\Users\\Alex\\Desktop\\ActXTest" на месторасположение файла Calc.dll на Вашем компьютере, на забывая при этом про двойные слеши \\. Стоит заметить, что при перекомпиляции DLL в среде VB6 происходит автоматическая регистрация библиотеки. Кроме того, все GUID и др. значения изменяются. Т.о. Reg-файл нужно создавать заново. В дальнейшем если версия DLL будет меняться планирую автоматизировать весь этот процесс написанием программы. Благо, исходник сканера уже есть ![]() Может конечно вся статья и зря, и есть более простой способ зарегистрировать Active-X Dll в среде текущего пользователя. С удовольствием выслушаю Ваши варианты и комментарии.
9
|
10.09.2012, 02:37 | |
10.09.2012, 02:37 | |
Ответы с готовыми решениями:
16
Регистрация Dll без админских прав?
|
Супер-модератор
![]() ![]() ![]() |
|
10.10.2012, 21:54 | 3 |
- я забыл сказать, что можно установить двоичную совместимость. Тогда, если интерфейс класса не меняется, в DLL можно вносить изменения и многократно компилировать - GUID-ы меняться не будут.
2
|
Супер-модератор
![]() ![]() ![]() |
|
10.10.2012, 22:40 | 5 |
Интерфейс класса - это совокупность его свойств и методов. Предположим, создается класс со следующим интерфейсом:
свойство-1 (чтение и запись) тип Integer свойство-2 (чтение и запись) тип Double свойство-3 (только чтение) тип Boolean метод-1 (a as Integer, s as string) as Integer метод-2 (x as long, z as double) as double Интерфейс считается неизменным, пока все его свойства и методы таковы, как приведено выше. Любое изменение (типов параметров, возвращаемых значений, удаление/добавление свойств и методов) меняет интерфейс. Но внутреннюю реализацию менять можно (не трогая заголовков). Эти изменения не считаются изменением интерфейса. Если на закладке "Components" свойств проекта установить двоичную совместимость, можно вносить все новые и новые изменения в реализацию класса (не трогая интерфейс), компилировать, и полученные компоненты (ocx, dll) копировать поверх старых без регистрации. Если же не установить двоичную совместимость, то при каждой компиляции будут генерироваться новые GUID-ы и придется на целевой машине повторять регистрацию. А на машине, где развернут проект (VB6) будет "пухнуть" реестр. Почитать об этом можно в книге по VB6 изд. Microsoft Press
2
|
здесь больше нет...
3375 / 1673 / 184
Регистрация: 03.02.2010
Сообщений: 1,219
|
|
19.11.2012, 17:07 | 6 |
![]() Решение
есть подозрение, что это связано с тем, где прописан класс (CU или LM).
Решил поделиться с хорошими людьми своими мыслями...
6
|
![]() |
||||||||||||
25.04.2013, 10:53 | 7 | |||||||||||
аналитика,
очень добротная вещица! Но извиняюсь, что влезаю в разговор.. ![]() Я решил добавить маленькую изюминку в ваш проект, можно регистрировать через него ocx и dll файлы без вывода самой формы, просто перетащив файл на готовый exe.
3
|
![]() |
||||||
25.04.2013, 11:06 | 8 | |||||
Единственное, что мою проблему что-то не удалось решить с MSWINSCK.OCX-ом.. =((
Печаль.. а другие вещи вроде регистрирует без проблем ( т.е. без прав админа ). Добавлено через 7 минут Забыл исправить:
аналитика, целую ваши руки =)))) У меня даже приславутый Winsock на рабочем компе без админа зарегестрировался!!!
2
|
-Lesnik-
|
|
26.06.2013, 14:08 | 9 |
Подскажите, что дописать к коду аналитика, что было можно зарегистрировать библиотеку таким образом:
regdll.exe -e:/name_dll.dll |
![]() ![]() ![]() |
||||||
26.06.2013, 15:02 [ТС] | 10 | |||||
@-Lesnik-, ничего не нужно дописывать.
@Bati4eli уже все сделал. У него в дополненном проекте EXE-файл называется RegYourDLL.exe Из командной строки:
0
|
![]() |
||||||
01.07.2013, 11:13 | 11 | |||||
![]() Решение
Dragokas,
Если есть такая возможность, то исправьте моё первое вложение.. там есть глюк: при вызове приложения из командой строки оно не будет регистрировать OCX- компоненты, т.к. смена поддерживаемых расширений идет в событии инициализации формы, также из командой строки нужно убирать ковычки:
3
|
Ушел с форума
![]() ![]() |
|
01.07.2013, 11:49 | 12 |
Есть и третий способ - сделать registration-free COM.
Подробности здесь: Registration-Free Activation of COM Components: A Walkthrough
2
|
![]() ![]() ![]() |
||||||
01.07.2013, 19:31 [ТС] | 13 | |||||
Ммм., вкуснятина.
Даже принцип построения для VB6 отдельно показали в данной статье. Я похожую библиотеку наблюдал, когда пользовался Bass.dll Она не требует регистрации, а вызов функций производится таким образом:
0
|
iLnes
|
|
10.10.2013, 00:15 | 14 |
Доброй ночи.
Простите, что поднимаю тему, но встал такой вопрос: можно ли с помощью этого метода установить BHO (Browser Helper Object) для Internet Explorer. Пробовался и бился битый час, но так и не получается. Может я не так что-то делаю. Кто-нибудь сталкивался с таким? |
![]() ![]() ![]() |
|
10.10.2013, 00:21 [ТС] | 15 |
Можете попытаться.
Готовая к использованию программа - в посте № 11. Качаете и регистрируете с помощью нее библиотеки DLL, OCX в составе Вашего приложения. Скорее всего не поможет, так как кроме регистрации еще нужно внести изменения в настройки самого браузера, и именно этот момент, возможно, потребует прав Администратора.
0
|
Ушел с форума
![]() ![]() |
|
10.10.2013, 09:26 | 16 |
Browser Helper Object
http://msdn.microsoft.com/en-u... s.85).aspx поэтому не получится. Кстати, в серверных редакциях Windows даже с правами администратора регистрация BHO ничего не даст, если включена усиленная конфигурация безопасности IE ESC (а она включена по умолчанию).
0
|
0 / 0 / 0
Регистрация: 16.10.2020
Сообщений: 32
|
|
21.10.2022, 07:42 | 17 |
У меня 429 ошибка на win 64x, без админа: ActiveX component can't create object
Регистрирую 32 разрядную Richtx32.ocx Помогите, пожалуйста.
0
|
21.10.2022, 07:42 | |
21.10.2022, 07:42 | ||||||
Помогаю со студенческими работами здесь
17
Запуск программы без прав администратора скриптом, запущенным с правами администратора Регистрация библиотеки ActiveX DLL БД без прав администратора Запуск из приложения с правами администратора, приложения без прав администратора Без прав администратора поменять dns Искать еще темы с ответами Или воспользуйтесь поиском по форуму:
|
|
![]() |
Новые блоги и статьи
![]() |
||||
Использование кэша Laravel - полный гайд
bytestream 18.02.2025
Кэширование - один из наиболее эффективных способов повышения производительности веб-приложений. В современном мире, где скорость загрузки страниц напрямую влияет на удержание пользователей и. . .
|
Создаем REST API в Laravel с аутентификацией через Passport
bytestream 18.02.2025
Разработка современных веб-приложений все чаще требует создания надежного и хорошо структурированного API. REST API стал стандартом де-факто для построения взаимодействия между клиентской и серверной. . .
|
Пайплайны в Laravel - полный гайд
bytestream 18.02.2025
Разработка современных веб-приложений часто требует обработки сложных процессов, состоящих из множества последовательных шагов. Например, при создании системы комментариев может потребоваться. . .
|
Как правильно использовать @required в Symfony
bytestream 18.02.2025
При разработке приложений на Symfony мы часто сталкиваемся с необходимостью внедрения зависимостей. Фреймворк предоставляет несколько способов управления этим процессом, и одним из таких инструментов. . .
|
Система безопасности в Laravel: возможности и примеры
Wired 18.02.2025
Каждый день появляются новые виды атак и уязвимостей, которые могут поставить под угрозу конфиденциальные данные пользователей и функционирование всей системы. В этом контексте выбор надежного. . .
|
Давайте сравним Django и Laravel
Wired 18.02.2025
Django и Laravel - два мощных инструмента, которые часто сравнивают между собой. Оба фреймворка предлагают разработчикам богатый набор возможностей для создания масштабируемых веб-приложений, но. . .
|
Laravel или React - что лучше?
Wired 18.02.2025
В разработке веб выбор правильного инструмента часто определяет успех всего проекта. Особенно интересным представляется сравнение Laravel и React - двух популярных технологий, которые часто. . .
|
Laravel 11: новые возможности, гайд по обновлению
Wired 18.02.2025
Laravel 11 - это новая масштабная версия одного из самых популярных PHP-фреймворков, выпущенная в марте 2024 года. Эта версия продолжает традицию внедрения передовых технологий и методологий. . .
|
Миграции в Laravel
Wired 18.02.2025
Разработка веб-приложений на Laravel неразрывно связана с управлением структурой базы данных. При работе над проектом часто возникает необходимость вносить изменения в схему базы данных - добавлять. . .
|
Аутентификация в Laravel
Wired 18.02.2025
В современном мире веб-разработки безопасность пользовательских данных становится критически важным аспектом любого приложения. Laravel, как один из самых популярных PHP-фреймворков, предоставляет. . .
|