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

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

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

Author24 — интернет-сервис помощи студентам
Итак, с целью спрятать пароль подключения к базе данных (поверхностное шифрование) у меня дошли руки к созданию 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\\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

И убеждаемся, что у нас все работает:
  • Отменяем регистрацию 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\\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, например так:
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\\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"
"C:\\Users\\Alex\\Desktop\\ActXTest"
на месторасположение файла Calc.dll на Вашем компьютере, на забывая при этом про двойные слеши \\.

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

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

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

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

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

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

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

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

Решение

Цитата Сообщение от 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 7
аналитика,
очень добротная вещица! Но извиняюсь, что влезаю в разговор..
Я решил добавить маленькую изюминку в ваш проект, можно регистрировать через него 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 8
Единственное, что мою проблему что-то не удалось решить с MSWINSCK.OCX-ом.. =((
Печаль.. а другие вещи вроде регистрирует без проблем ( т.е. без прав админа ).

Добавлено через 7 минут
Забыл исправить:
Visual BasicУвеличитьКопировать
1
File1.Pattern = "*.ocx; *.dll"
Добавлено через 3 минуты
аналитика, целую ваши руки =))))
У меня даже приславутый Winsock на рабочем компе без админа зарегестрировался!!!
2
-Lesnik-
26.06.2013, 14:08 9
Подскажите, что дописать к коду аналитика, что было можно зарегистрировать библиотеку таким образом:
regdll.exe -e:/name_dll.dll
Эксперт WindowsАвтор FAQ
 Аватар для Dragokas
18021 / 7722 / 892
Регистрация: 25.12.2011
Сообщений: 11,500
Записей в блоге: 16
26.06.2013, 15:02  [ТС] 10
@-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 11
Лучший ответ Сообщение было отмечено 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
Ушел с форума
Эксперт С++
 Аватар для Убежденный
16478 / 7441 / 1187
Регистрация: 02.05.2013
Сообщений: 11,617
Записей в блоге: 1
01.07.2013, 11:49 12
Цитата Сообщение от Dragokas Посмотреть сообщение
Выходов из ситуации было 2:
1) Делать установщик, которому прописывать манифест повышенных прав (иконка со щитом), либо повторный запуск процесса от имени другого пользователя через runas. В любом случае буду получать предупреждения системы защиты.
2) Прописать вручную ветки реестра для текущего пользователя (HKCU), т.к. утилита Regsvr32 такой роскоши нам не дает.
Есть и третий способ - сделать registration-free COM.
Подробности здесь: Registration-Free Activation of COM Components: A Walkthrough
2
Эксперт WindowsАвтор FAQ
 Аватар для Dragokas
18021 / 7722 / 892
Регистрация: 25.12.2011
Сообщений: 11,500
Записей в блоге: 16
01.07.2013, 19:31  [ТС] 13
Ммм., вкуснятина.
Даже принцип построения для 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 14
Доброй ночи.
Простите, что поднимаю тему, но встал такой вопрос:
можно ли с помощью этого метода установить BHO (Browser Helper Object) для Internet Explorer.
Пробовался и бился битый час, но так и не получается. Может я не так что-то делаю. Кто-нибудь сталкивался с таким?
Эксперт WindowsАвтор FAQ
 Аватар для Dragokas
18021 / 7722 / 892
Регистрация: 25.12.2011
Сообщений: 11,500
Записей в блоге: 16
10.10.2013, 00:21  [ТС] 15
Можете попытаться.
Готовая к использованию программа - в посте № 11. Качаете и регистрируете с помощью нее библиотеки DLL, OCX в составе Вашего приложения.
Скорее всего не поможет, так как кроме регистрации еще нужно внести изменения в настройки самого браузера, и именно этот момент, возможно, потребует прав Администратора.
0
Ушел с форума
Эксперт С++
 Аватар для Убежденный
16478 / 7441 / 1187
Регистрация: 02.05.2013
Сообщений: 11,617
Записей в блоге: 1
10.10.2013, 09:26 16
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
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
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
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
Ответ Создать тему

Редактор формул (кликните на картинку в правом углу, чтобы закрыть)
Новые блоги и статьи
Использование кэша 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-фреймворков, предоставляет. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru