|
|
|||||||||||||||||||||
Регистрация ActiveX-DLL без прав администратора (UAC включен)10.09.2012, 02:37. Показов 27303. Ответов 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\\C alc.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\\C alc.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\\C alc.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\\C alc.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\\Cal c.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\Inter face\{25E88292-036E-479D-B010-82EFB67A1001}] @="_myCalc" [HKEY_CURRENT_USER\SOFTWARE\Classes\Inter face\{25E88292-036E-479D-B010-82EFB67A1001}\ProxyStubClsid32] @="{00020424-0000-0000-C000-000000000046}" [HKEY_CURRENT_USER\SOFTWARE\Classes\Inter face\{25E88292-036E-479D-B010-82EFB67A1001}\TypeLib] @="{4D922142-997D-4403-A002-2387BCF4A07F}" "Version"="1.0" [HKEY_CURRENT_USER\SOFTWARE\Classes\TypeL ib\{4D922142-997D-4403-A002-2387BCF4A07F}] [HKEY_CURRENT_USER\SOFTWARE\Classes\TypeL ib\{4D922142-997D-4403-A002-2387BCF4A07F}\1.0] @="Calc" [HKEY_CURRENT_USER\SOFTWARE\Classes\TypeL ib\{4D922142-997D-4403-A002-2387BCF4A07F}\1.0\0] [HKEY_CURRENT_USER\SOFTWARE\Classes\TypeL ib\{4D922142-997D-4403-A002-2387BCF4A07F}\1.0\0\win32] @="C:\\Users\\Alex\\Desktop\\ActXTest\\Cal c.dll" [HKEY_CURRENT_USER\SOFTWARE\Classes\TypeL ib\{4D922142-997D-4403-A002-2387BCF4A07F}\1.0\FLAGS] @="0" [HKEY_CURRENT_USER\SOFTWARE\Classes\TypeL ib\{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 | |
|
Ответы с готовыми решениями:
16
Регистрация Dll без админских прав?
|
|
Супер-модератор
|
||
| 10.10.2012, 21:54 | ||
|
2
|
||
|
Супер-модератор
|
|
| 10.10.2012, 22:40 | |
|
Интерфейс класса - это совокупность его свойств и методов. Предположим, создается класс со следующим интерфейсом:
свойство-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
|
|
|
здесь больше нет...
3376 / 1674 / 184
Регистрация: 03.02.2010
Сообщений: 1,219
|
||
| 19.11.2012, 17:07 | ||
Сообщение было отмечено как решение
РешениеРешил поделиться с хорошими людьми своими мыслями...
6
|
||
|
|
||||||||||||
| 25.04.2013, 10:53 | ||||||||||||
|
аналитика,
очень добротная вещица! Но извиняюсь, что влезаю в разговор.. ![]() Я решил добавить маленькую изюминку в ваш проект, можно регистрировать через него ocx и dll файлы без вывода самой формы, просто перетащив файл на готовый exe.
3
|
||||||||||||
|
|
||||||
| 25.04.2013, 11:06 | ||||||
|
Единственное, что мою проблему что-то не удалось решить с MSWINSCK.OCX-ом.. =((
Печаль.. а другие вещи вроде регистрирует без проблем ( т.е. без прав админа ). Добавлено через 7 минут Забыл исправить:
аналитика, целую ваши руки =)))) У меня даже приславутый Winsock на рабочем компе без админа зарегестрировался!!!
2
|
||||||
|
-Lesnik-
|
|
| 26.06.2013, 14:08 | |
|
Подскажите, что дописать к коду аналитика, что было можно зарегистрировать библиотеку таким образом:
regdll.exe -e:/name_dll.dll |
|
|
|
||||||
| 26.06.2013, 15:02 [ТС] | ||||||
|
@-Lesnik-, ничего не нужно дописывать.
@Bati4eli уже все сделал. У него в дополненном проекте EXE-файл называется RegYourDLL.exe Из командной строки:
0
|
||||||
|
|
||||||
| 01.07.2013, 11:13 | ||||||
Сообщение было отмечено Dragokas как решение
Решение
Dragokas,
Если есть такая возможность, то исправьте моё первое вложение.. там есть глюк: при вызове приложения из командой строки оно не будет регистрировать OCX- компоненты, т.к. смена поддерживаемых расширений идет в событии инициализации формы, также из командой строки нужно убирать ковычки:
3
|
||||||
|
Ушел с форума
|
||
| 01.07.2013, 11:49 | ||
|
Подробности здесь: Registration-Free Activation of COM Components: A Walkthrough
2
|
||
|
|
||||||
| 01.07.2013, 19:31 [ТС] | ||||||
|
Ммм., вкуснятина.
Даже принцип построения для VB6 отдельно показали в данной статье. Я похожую библиотеку наблюдал, когда пользовался Bass.dll Она не требует регистрации, а вызов функций производится таким образом:
0
|
||||||
|
iLnes
|
|
| 10.10.2013, 00:15 | |
|
Доброй ночи.
Простите, что поднимаю тему, но встал такой вопрос: можно ли с помощью этого метода установить BHO (Browser Helper Object) для Internet Explorer. Пробовался и бился битый час, но так и не получается. Может я не так что-то делаю. Кто-нибудь сталкивался с таким? |
|
|
|
|
| 10.10.2013, 00:21 [ТС] | |
|
Можете попытаться.
Готовая к использованию программа - в посте № 11. Качаете и регистрируете с помощью нее библиотеки DLL, OCX в составе Вашего приложения. Скорее всего не поможет, так как кроме регистрации еще нужно внести изменения в настройки самого браузера, и именно этот момент, возможно, потребует прав Администратора.
0
|
|
|
Ушел с форума
|
||
| 10.10.2013, 09:26 | ||
|
Browser Helper Object
http://msdn.microsoft.com/en-u... s.85).aspx
поэтому не получится. Кстати, в серверных редакциях Windows даже с правами администратора регистрация BHO ничего не даст, если включена усиленная конфигурация безопасности IE ESC (а она включена по умолчанию).
0
|
||
|
1 / 1 / 0
Регистрация: 16.10.2020
Сообщений: 37
|
|
| 21.10.2022, 07:42 | |
|
У меня 429 ошибка на win 64x, без админа: ActiveX component can't create object
Регистрирую 32 разрядную Richtx32.ocx Помогите, пожалуйста.
0
|
|
| 21.10.2022, 07:42 | |
|
Помогаю со студенческими работами здесь
17
Запуск программы без прав администратора скриптом, запущенным с правами администратора Регистрация библиотеки ActiveX DLL БД без прав администратора Запуск из приложения с правами администратора, приложения без прав администратора Без прав администратора поменять dns Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
|
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11
— это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
|
Classic Notepad for Windows 11
Jel 10.01.2026
Old Classic Notepad for Windows 11
Приложение для Windows 11, позволяющее пользователям вернуть классическую версию текстового редактора «Блокнот» из Windows 10. Программа предоставляет более. . .
|
Почему дизайн решает?
Neotwalker 09.01.2026
В современном мире, где конкуренция за внимание потребителя достигла пика, дизайн становится мощным инструментом для успеха бренда. Это не просто красивый внешний вид продукта или сайта — это. . .
|
|
Модель микоризы: классовый агентный подход 3
anaschu 06.01.2026
aa0a7f55b50dd51c5ec569d2d10c54f6/
O1rJuneU_ls
https:/ / vkvideo. ru/ video-115721503_456239114
|
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR
ФедосеевПавел 06.01.2026
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR
ВВЕДЕНИЕ
Введу сокращения:
аналоговый ПИД — ПИД регулятор с управляющим выходом в виде числа в диапазоне от 0% до. . .
|
Модель микоризы: классовый агентный подход 2
anaschu 06.01.2026
репозиторий https:/ / github. com/ shumilovas/ fungi
ветка по-частям.
коммит Create переделка под биомассу. txt
вход sc, но sm считается внутри мицелия. кстати, обьем тоже должен там считаться. . . .
|
Расчёт токов в цепи постоянного тока
igorrr37 05.01.2026
/ *
Дана цепь постоянного тока с сопротивлениями и источниками (напряжения, ЭДС и тока). Найти токи и напряжения во
всех элементах. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа и. . .
|