С Новым годом! Форум программистов, компьютерный форум, киберфорум
Visual Basic
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.58/137: Рейтинг темы: голосов - 137, средняя оценка - 4.58
Эксперт WindowsАвтор FAQ
 Аватар для Dragokas
18030 / 7733 / 892
Регистрация: 25.12.2011
Сообщений: 11,502
Записей в блоге: 16

Регистрация ActiveX-DLL без прав администратора (UAC включен)

10.09.2012, 02:37. Показов 27303. Ответов 16

Студворк — интернет-сервис помощи студентам
Итак, с целью спрятать пароль подключения к базе данных (поверхностное шифрование) у меня дошли руки к созданию Active-X библиотеки.

Благодаря замечательной статье COM в действии Catstail-a все удалось с первого раза.

За исключением проблем при регистрации DLL через Regsvr32, которой обычных прав оказалось недостаточно,
ведь она записывает значения в реестр в ветку HKLM.
А как известно, без регистрации подключить библиотеку к проекту ни поздним, ни ранним связыванием не получится.

Выходов из ситуации было 2:
1) Делать установщик, которому прописывать манифест повышенных прав (иконка со щитом), либо повторный запуск процесса от имени другого пользователя через runas. В любом случае буду получать предупреждения системы защиты.
2) Прописать вручную ветки реестра для текущего пользователя (HKCU), т.к. утилита Regsvr32 такой роскоши нам не дает.

Вторым способом я и занялся.

Шаг 1. Регистрация DLL с правами администратора, например через (.cmd) Batch-файл, или через запуск консоли CMD в строке поиска Ctrl+Shift+Enter.
Bash
1
2
Regsvr32.exe C:\Alex\Desktop\ActXTest\Calc.dll
::Ключ /s - Тихий режим
Шаг 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\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

И убеждаемся, что у нас все работает:
  • Отменяем регистрацию DLL:
    Bash
    1
    
    Regsvr32.exe /u C:\Alex\Desktop\ActXTest\Calc.dll
    (требует прав администратора через раз ). А иначе выдает ошибку "Не удалось выполнить вызов DllRegisterServer. Код ошибки 0х80004005."
  • Запускаем модифицированный Reg-файл
  • Перезапускаем процесс, откуда тестируем DLL (я использовал Excel VBA), код аналогичен и для VB6:
    Visual Basic
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    
    'Для раннего связывания -> Tools (VBA) Project (VB) -> Preferences -> Calc (поставить птичку)
    Sub Command1_Click()
    On Error GoTo ErrH
    'Dim C As Calc.myCalc 'раннее связывание
    Dim C As Object 'позднее связывание
    Dim v
     
    'Set C = New Calc.myCalc 'раннее связывание
     
    Set C = CreateObject("calc.mycalc") 'позднее связывание
     
    v = C.Calculate(7, 8, "*")
     
    Debug.Print v
     
    'C.Top = C.Height
    'C.Left = C.Width
     
    'C.Show
     
    Set C = Nothing
    Exit Sub
     
    ErrH:
    Debug.Print Err.Description
    End Sub
Убеждаемся, что присвоение объекта происходит корректно.
Ошибок чаще всего бывает две:
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, например так:
Visual Basic
1
Shell "cmd /c reg.exe import e:\Dll.reg", vbHide
Команда выполнялась под учетной записью с ограниченными правами,
а также успешно испытана на свежеустановленной 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"
"C:\\Users\\Alex\\Desktop\\ActXTest"
на месторасположение файла Calc.dll на Вашем компьютере, на забывая при этом про двойные слеши \\.

Стоит заметить, что при перекомпиляции DLL в среде VB6 происходит автоматическая регистрация библиотеки. Кроме того, все GUID и др. значения изменяются. Т.о. Reg-файл нужно создавать заново.

В дальнейшем если версия DLL будет меняться планирую автоматизировать весь этот процесс написанием программы. Благо, исходник сканера уже есть

Может конечно вся статья и зря, и есть более простой способ зарегистрировать Active-X Dll в среде текущего пользователя. С удовольствием выслушаю Ваши варианты и комментарии.
Вложения
Тип файла: rar ActXTest.rar (43.6 Кб, 229 просмотров)
9
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
10.09.2012, 02:37
Ответы с готовыми решениями:

Регистрация dll без прав администратора
Добрый день! Пользователям при в ходе в систему необходимо регистрировать библиотеки. Т.е. при каждом входе в систему пользователь...

Регистрация Dll без админских прав?
Можно ли как-то зарегистрировать dll файл без админских прав? Т. е. чтобы пользователь зашел и мог работать и не надо было бы на каждом...

Запуск от администратора без вызова UAC
привет всем , у меня проблема : моему файлу ничего нельзя делать в директории Program files. можно его как-то запустить от имени...

16
Супер-модератор
Эксперт функциональных языков программированияЭксперт Python
 Аватар для Catstail
38167 / 21102 / 4307
Регистрация: 12.02.2012
Сообщений: 34,690
Записей в блоге: 14
10.09.2012, 11:40
Спасибо за добрые слова в мой адрес... Материал замечательный! Сам хотел заняться, да Вы опередили!...
0
Супер-модератор
Эксперт функциональных языков программированияЭксперт Python
 Аватар для Catstail
38167 / 21102 / 4307
Регистрация: 12.02.2012
Сообщений: 34,690
Записей в блоге: 14
10.10.2012, 21:54
Цитата Сообщение от Dragokas Посмотреть сообщение
В дальнейшем если версия DLL будет меняться
- я забыл сказать, что можно установить двоичную совместимость. Тогда, если интерфейс класса не меняется, в DLL можно вносить изменения и многократно компилировать - GUID-ы меняться не будут.
2
Эксперт WindowsАвтор FAQ
 Аватар для Dragokas
18030 / 7733 / 892
Регистрация: 25.12.2011
Сообщений: 11,502
Записей в блоге: 16
10.10.2012, 22:02  [ТС]
Что следует понимать под "интерфейсом класса" ?

Цитата Сообщение от Catstail Посмотреть сообщение
установить двоичную совместимость
А можно по-подробнее, где об этом почитать...
0
Супер-модератор
Эксперт функциональных языков программированияЭксперт Python
 Аватар для Catstail
38167 / 21102 / 4307
Регистрация: 12.02.2012
Сообщений: 34,690
Записей в блоге: 14
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
Миниатюры
Регистрация ActiveX-DLL без прав администратора (UAC включен)  
2
здесь больше нет...
3376 / 1674 / 184
Регистрация: 03.02.2010
Сообщений: 1,219
19.11.2012, 17:07
Лучший ответ Сообщение было отмечено как решение

Решение

Цитата Сообщение от Dragokas Посмотреть сообщение
Отменяем регистрацию DLL:

Regsvr32.exe /u C:\Alex\Desktop\ActXTest\Calc.dll

(требует прав администратора через раз )
есть подозрение, что это связано с тем, где прописан класс (CU или LM).

Решил поделиться с хорошими людьми своими мыслями...
Вложения
Тип файла: rar HKCU_regsvr32.rar (4.0 Кб, 203 просмотров)
6
 Аватар для Bati4eli
617 / 17 / 8
Регистрация: 05.05.2012
Сообщений: 221
Записей в блоге: 11
25.04.2013, 10:53
аналитика,
очень добротная вещица! Но извиняюсь, что влезаю в разговор..
Я решил добавить маленькую изюминку в ваш проект, можно регистрировать через него ocx и dll файлы без вывода самой формы, просто перетащив файл на готовый exe.
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
Private Sub Form_Load()
Dim fso As Scripting.FileSystemObject
Set fso = CreateObject("Scripting.FileSystemObject")
Dim cmm As String
cmm = Command
If cmm <> "" Then
    Me.Hide
    Drive1.Drive = fso.GetFile(cmm).Drive.Path
    Dir1.Path = fso.GetFile(cmm).ParentFolder.Path
    File1.Path = Dir1.Path
    File1.FileName = fso.GetFile(cmm).Name
    File1_Click
    cmdRegister_Click
    End
End If
End Sub
 Комментарий модератора 
Последняя версия находится в посте № 11
Вложения
Тип файла: zip Регистратор.zip (14.4 Кб, 167 просмотров)
3
 Аватар для Bati4eli
617 / 17 / 8
Регистрация: 05.05.2012
Сообщений: 221
Записей в блоге: 11
25.04.2013, 11:06
Единственное, что мою проблему что-то не удалось решить с MSWINSCK.OCX-ом.. =((
Печаль.. а другие вещи вроде регистрирует без проблем ( т.е. без прав админа ).

Добавлено через 7 минут
Забыл исправить:
Visual Basic
1
File1.Pattern = "*.ocx; *.dll"
Добавлено через 3 минуты
аналитика, целую ваши руки =))))
У меня даже приславутый Winsock на рабочем компе без админа зарегестрировался!!!
2
-Lesnik-
26.06.2013, 14:08
Подскажите, что дописать к коду аналитика, что было можно зарегистрировать библиотеку таким образом:
regdll.exe -e:/name_dll.dll
Эксперт WindowsАвтор FAQ
 Аватар для Dragokas
18030 / 7733 / 892
Регистрация: 25.12.2011
Сообщений: 11,502
Записей в блоге: 16
26.06.2013, 15:02  [ТС]
@-Lesnik-, ничего не нужно дописывать.

@Bati4eli уже все сделал. У него в дополненном проекте EXE-файл называется RegYourDLL.exe
Из командной строки:

Bash
1
RegYourDLL.exe "e:\name_dll.dll"
0
 Аватар для Bati4eli
617 / 17 / 8
Регистрация: 05.05.2012
Сообщений: 221
Записей в блоге: 11
01.07.2013, 11:13
Лучший ответ Сообщение было отмечено Dragokas как решение

Решение

Dragokas,
Если есть такая возможность, то исправьте моё первое вложение.. там есть глюк: при вызове приложения из командой строки оно не будет регистрировать OCX- компоненты, т.к. смена поддерживаемых расширений идет в событии инициализации формы, также из командой строки нужно убирать ковычки:
Visual Basic
1
2
3
4
5
6
7
8
Private Sub Form_Load()
Dim fso As Scripting.FileSystemObject
Set fso = CreateObject("Scripting.FileSystemObject")
Dim cmm As String
Set mappTLI = New TLI.TLIApplication
File1.Pattern = "*.ocx; *.dll"
Dir1.Path = App.Path
cmm = Replace(Command, """", "")
Вложения
Тип файла: zip Регистратор.zip (14.8 Кб, 247 просмотров)
3
Ушел с форума
Эксперт С++
 Аватар для Убежденный
16481 / 7444 / 1187
Регистрация: 02.05.2013
Сообщений: 11,616
Записей в блоге: 1
01.07.2013, 11:49
Цитата Сообщение от Dragokas Посмотреть сообщение
Выходов из ситуации было 2:
1) Делать установщик, которому прописывать манифест повышенных прав (иконка со щитом), либо повторный запуск процесса от имени другого пользователя через runas. В любом случае буду получать предупреждения системы защиты.
2) Прописать вручную ветки реестра для текущего пользователя (HKCU), т.к. утилита Regsvr32 такой роскоши нам не дает.
Есть и третий способ - сделать registration-free COM.
Подробности здесь: Registration-Free Activation of COM Components: A Walkthrough
2
Эксперт WindowsАвтор FAQ
 Аватар для Dragokas
18030 / 7733 / 892
Регистрация: 25.12.2011
Сообщений: 11,502
Записей в блоге: 16
01.07.2013, 19:31  [ТС]
Ммм., вкуснятина.
Даже принцип построения для VB6 отдельно показали в данной статье.

Я похожую библиотеку наблюдал, когда пользовался Bass.dll
Она не требует регистрации, а вызов функций производится таким образом:

Visual Basic
1
Declare Function BASS_SetVolume Lib "bass.dll" (ByVal volume As Single) As Long
0
iLnes
10.10.2013, 00:15
Доброй ночи.
Простите, что поднимаю тему, но встал такой вопрос:
можно ли с помощью этого метода установить BHO (Browser Helper Object) для Internet Explorer.
Пробовался и бился битый час, но так и не получается. Может я не так что-то делаю. Кто-нибудь сталкивался с таким?
Эксперт WindowsАвтор FAQ
 Аватар для Dragokas
18030 / 7733 / 892
Регистрация: 25.12.2011
Сообщений: 11,502
Записей в блоге: 16
10.10.2013, 00:21  [ТС]
Можете попытаться.
Готовая к использованию программа - в посте № 11. Качаете и регистрируете с помощью нее библиотеки DLL, OCX в составе Вашего приложения.
Скорее всего не поможет, так как кроме регистрации еще нужно внести изменения в настройки самого браузера, и именно этот момент, возможно, потребует прав Администратора.
0
Ушел с форума
Эксперт С++
 Аватар для Убежденный
16481 / 7444 / 1187
Регистрация: 02.05.2013
Сообщений: 11,616
Записей в блоге: 1
10.10.2013, 09:26
Browser Helper Object
http://msdn.microsoft.com/en-u... s.85).aspx

Registration of Helper Objects

A BHO is a COM server and should be registered both as a COM server and as a BHO.
The ATL Wizard provides you with the necessary registrar script code (RGS) that accomplishes
the first task. What follows is the RGS code that properly installs a helper object.
(The CLSID comes from the example.)

HKLM {
SOFTWARE {
Microsoft {
Windows {
CurrentVersion {
Explorer {
'Browser Helper Objects' {
ForceRemove {1E1B2879-88FF-11D2-8D96-D7ACAC95951F}
}}}}}}}
Доступ на запись к HKLM, как известно, только у системы и администраторов,
поэтому не получится. Кстати, в серверных редакциях 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
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
21.10.2022, 07:42
Помогаю со студенческими работами здесь

Запуск программы без прав администратора скриптом, запущенным с правами администратора
Добрый день. Запускаю скрипт с правами администратора. Тот в свою очередь запускает программу, как я понимаю, тоже с правами админа....

Регистрация библиотеки ActiveX DLL
Что-то у меня каша в голове образовалась, помогите понять основные моменты. Создана библиотека ActiveX DLL на VB6 и функции этой dll...

БД без прав администратора
Скажите пожалуйста можно ли отобразить БД без прав администратора? Просто это тема курсовой, мой ноут сдох, а учебные компы стоят на учетке...

Запуск из приложения с правами администратора, приложения без прав администратора
Как сделать подобный запуск?

Без прав администратора поменять dns
Win XP 32. Рабочая станция находится в определенном домене. Каким то образом слетели dns и они не те которые должны быть. В следствие этого...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
17
Ответ Создать тему
Новые блоги и статьи
сукцессия микоризы: основная теория в виде двух уравнений.
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 законам Кирхгофа и. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru