|
|
|||||||||||||||||||||
Регистрация ActiveX-DLL без прав администратора (UAC включен)10.09.2012, 02:37. Показов 27158. Ответов 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 Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
||||
|
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
|
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
|
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов
На странице:
https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/
нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
|
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов.
. . .
|
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
|
|
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
|
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут.
В век Веб все очень привыкли к дизайну Single-Page-Application .
Быстренько разберем подход "на фреймах".
Мы делаем одну. . .
|
Фото: Daniel Greenwood
kumehtar 13.11.2025
|
Расскажи мне о Мире, бродяга
kumehtar 12.11.2025
— Расскажи мне о Мире, бродяга,
Ты же видел моря и метели.
Как сменялись короны и стяги,
Как эпохи стрелою летели.
- Этот мир — это крылья и горы,
Снег и пламя, любовь и тревоги,
И бескрайние. . .
|
PowerShell Snippets
iNNOKENTIY21 11.11.2025
Модуль PowerShell 5. 1+ : Snippets. psm1
У меня модуль расположен в пользовательской папке модулей, по умолчанию: \Documents\WindowsPowerShell\Modules\Snippets\
А в самом низу файла-профиля. . .
|