Использование COM без регистрации

Для неординарных вопросов. Если вы опытный программист, попавший в трудную ситуацию, — вам сюда.

Модератор: gaidar

Правила форума
Этот раздел не предназначен для того, чтобы вы адресовали свою проблему профессионалам.
Этот раздел предназначен для профессионалов, которые столкнулись с проблемой и не могут решить ее самостоятельно.
Если вы считаете себя профессионалом, а свою проблему сложной — вам сюда.
Если модератор посчитает, что вы ошиблись, то на первый раз он перенесет ваше сообщение в основной раздел без последствий для автора. Во второй раз тема будет закрыта, а автору будет выписано нарушение. В третий раз автор будет забанен.
keks-n
Доктор VB наук
Доктор VB наук
Аватара пользователя
 
Сообщения: 2509
Зарегистрирован: 19.09.2005 (Пн) 17:17
Откуда: г. Москва

Использование COM без регистрации

Сообщение keks-n » 06.10.2006 (Пт) 18:52

Данная потребность, кажется возникала у всех - нужен некий ActiveX, но нет прав для его регистрации. Я попытался проделать оное 2-я методами: перехват внутрипроцесных обращений к реестру, для эмуляции присутствия(понял, что это сложно и оставил как крайний вариант), и попытаться что-нибудь сделать штатными средствами. К сожалению моих знаний здесь хватило лишь на CoLoadLibrary, который ничем не помог.
Собственно вопрос: Как?
Изображение

tyomitch
Пользователь #1352
Пользователь #1352
Аватара пользователя
 
Сообщения: 12822
Зарегистрирован: 20.10.2002 (Вс) 17:02
Откуда: חיפה

Сообщение tyomitch » 06.10.2006 (Пт) 19:53

Единственный ответ -- патчить MSVBVM -- едва ли тебя устроит.
Других способов я не знаю.

Хотя, есть мегакривой хак: просто скопировать нужные ветки реестра со своей машины, и забыть про саморегистрацию.
Изображение

keks-n
Доктор VB наук
Доктор VB наук
Аватара пользователя
 
Сообщения: 2509
Зарегистрирован: 19.09.2005 (Пн) 17:17
Откуда: г. Москва

Сообщение keks-n » 06.10.2006 (Пт) 20:14

В том то и дело, что на запись в HKLM нет прав. Я предполагаю сделать перехват внутри процесса функций доступа к реестру и подсовывать данные несуществующей ветки. Но это крайний вариант.
А CoCreateInstance обязательно обратится к реестру в поисках DLL соответствующей CLSID?
И можно ли каким либо образом создать экземпляр без неё? Она вроде бы получает как-то IClassFactory из DLL и через него создаёт объект. Но дальше копать не получается из-за недостатка информации.
Изображение

NashRus
Постоялец
Постоялец
 
Сообщения: 388
Зарегистрирован: 18.03.2006 (Сб) 1:16

Сообщение NashRus » 06.10.2006 (Пт) 20:41

а COM EXE тоже не запускаются ?

tyomitch
Пользователь #1352
Пользователь #1352
Аватара пользователя
 
Сообщения: 12822
Зарегистрирован: 20.10.2002 (Вс) 17:02
Откуда: חיפה

Сообщение tyomitch » 07.10.2006 (Сб) 1:39

keks-n писал(а):В том то и дело, что на запись в HKLM нет прав.

Нужно писать в HKCU. Но MSVBVM так не умеет.
keks-n писал(а):Я предполагаю сделать перехват внутри процесса функций доступа к реестру и подсовывать данные несуществующей ветки. Но это крайний вариант.

У тебя вообще все проблемы решаются одинаково ;-)
keks-n писал(а):А CoCreateInstance обязательно обратится к реестру в поисках DLL соответствующей CLSID?

Да.
keks-n писал(а):И можно ли каким либо образом создать экземпляр без неё? Она вроде бы получает как-то IClassFactory из DLL и через него создаёт объект.

Если ты собираешься руками реализовать весь COM, то на VB это изысканное извращение.
Изображение

_ae_
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 165
Зарегистрирован: 08.10.2006 (Вс) 14:37

Сообщение _ae_ » 08.10.2006 (Вс) 14:59

А нельзя ли просто подгрузить указанный ActiveX и затем вызвать её DllGetClassObject ?

keks-n
Доктор VB наук
Доктор VB наук
Аватара пользователя
 
Сообщения: 2509
Зарегистрирован: 19.09.2005 (Пн) 17:17
Откуда: г. Москва

Сообщение keks-n » 08.10.2006 (Вс) 15:34

По идее должно сработать. Но я пока нашёл возможность не использовать компонент, поэтому решать проблему буду позже, а пока занят написанием программы, где она возникла.
Изображение

Antonariy
Повелитель Internet Explorer
Повелитель Internet Explorer
Аватара пользователя
 
Сообщения: 4824
Зарегистрирован: 28.04.2005 (Чт) 14:33
Откуда: Мимо проходил

Сообщение Antonariy » 08.10.2006 (Вс) 16:31

Создание объекта из ActiveX-сервера (OCX, DLL) без регистрации. Тест проводился только под WinXP.
Вложения
create_obj_wo_reg_197723.zip
(3.65 Кб) Скачиваний: 1420
Лучший способ понять что-то самому — объяснить это другому.

keks-n
Доктор VB наук
Доктор VB наук
Аватара пользователя
 
Сообщения: 2509
Зарегистрирован: 19.09.2005 (Пн) 17:17
Откуда: г. Москва

Сообщение keks-n » 08.10.2006 (Вс) 16:57

Спасибо. Судя по тому, что делает код(я его минут 10 изучал) работать он будет везде.
Изображение

xenomorph
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 508
Зарегистрирован: 18.04.2004 (Вс) 11:41
Откуда: это не важно - на сегодня у меня есть алиби ...

Re:

Сообщение xenomorph » 31.10.2006 (Вт) 19:39

Создание объекта из ActiveX-сервера (OCX, DLL) без регистрации. Тест проводился только под WinXP.


???
Можно поподробнее?

У меня та же проблема - *.ocx плагины лапки протягивают под ограниченым аккаунтом 8-(.

2 keks-n

Проблему решил?
--
Заранее огромное спасибо!
... Dpkjvfnm dc`xnj itdtkbnmcz, f tckb yt itdtkbnmcz hfcitdtkbnm b dpkjvfnm !!! ...

keks-n
Доктор VB наук
Доктор VB наук
Аватара пользователя
 
Сообщения: 2509
Зарегистрирован: 19.09.2005 (Пн) 17:17
Откуда: г. Москва

Сообщение keks-n » 01.11.2006 (Ср) 0:53

Antonariy же выложил код. Очень удобно, только Winsock, созданный таким образом, работает несколько некорректно. Но это - детали. По идее надо бы это дело привести в божеский вид, заюзав tlb. Просто вызов по указателю в VB исполнени некрасиво смотрится.
Изображение

xenomorph
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 508
Зарегистрирован: 18.04.2004 (Вс) 11:41
Откуда: это не важно - на сегодня у меня есть алиби ...

Сообщение xenomorph » 05.11.2006 (Вс) 14:47

2
Код: Выделить всё
keks-n
Я лоханулся!
Входил без регистрации - а так не видно аттача.
Всё работает!
Спасибо Огроиное!
--
з.ы. 2
Код: Выделить всё
keks-n
а в чём проблема с винсоком?
[ИМХО СSocket в случае больших глюков спасёт ситуацию]
но всё равно хочу узнать чего с ним не так?
... Dpkjvfnm dc`xnj itdtkbnmcz, f tckb yt itdtkbnmcz hfcitdtkbnm b dpkjvfnm !!! ...

keks-n
Доктор VB наук
Доктор VB наук
Аватара пользователя
 
Сообщения: 2509
Зарегистрирован: 19.09.2005 (Пн) 17:17
Откуда: г. Москва

Сообщение keks-n » 05.11.2006 (Вс) 20:13

xenomorph
Наверно подсветка на форуме глючит. А проблема в том, что он в скомпилированном виде, генерируя ошибку провоцирует GPF. Почему, я так и не понял, видимо из-за отсутствия привязки к Site, характерной для контролов. Надо бы сделать, благо tyomitch выкладывал пример.
Изображение

Sergeant Pepper
Новичок
Новичок
 
Сообщения: 31
Зарегистрирован: 25.08.2006 (Пт) 8:49

Сообщение Sergeant Pepper » 26.03.2007 (Пн) 10:19

Для использования ActiveX dll без их регистрации, можно создать manifest файл.
См. Registration-Free Activation of COM Components: A Walkthrough

Andrey Fedorov
Член-корреспондент академии VBStreets
Член-корреспондент академии VBStreets
 
Сообщения: 3287
Зарегистрирован: 21.05.2004 (Пт) 9:28
Откуда: Москва

Re: Использование COM без регистрации

Сообщение Andrey Fedorov » 30.03.2007 (Пт) 9:13

keks-n писал(а):Собственно вопрос: Как?


Большинство ActiveX компонентов достаточно кинуть в папку программы. Мне встречалось не столь уж много компонентов которые бы при этом не работали и требовали явную регистрацию.
Фиг Вам! - Сказал Чебурашка, обгладывая Крокодила Гену...

keks-n
Доктор VB наук
Доктор VB наук
Аватара пользователя
 
Сообщения: 2509
Зарегистрирован: 19.09.2005 (Пн) 17:17
Откуда: г. Москва

Сообщение keks-n » 01.04.2007 (Вс) 19:53

Sergeant Pepper
А манифест сработает для NT4? То-то.
Изображение

Antonariy
Повелитель Internet Explorer
Повелитель Internet Explorer
Аватара пользователя
 
Сообщения: 4824
Зарегистрирован: 28.04.2005 (Чт) 14:33
Откуда: Мимо проходил

Сообщение Antonariy » 02.04.2007 (Пн) 10:01

А много ли пользователей сидят под NT4? И интересует ли кого-нибудь эта крошечная маргинальная потребительская ниша? То-то.
Лучший способ понять что-то самому — объяснить это другому.

alibek
Большой Человек
Большой Человек
 
Сообщения: 14205
Зарегистрирован: 19.04.2002 (Пт) 11:40
Откуда: Russia

Сообщение alibek » 02.04.2007 (Пн) 10:06

Под Windows 2000 манифест вроде бы тоже не работает.
Lasciate ogni speranza, voi ch'entrate.

Matew
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 894
Зарегистрирован: 28.06.2004 (Пн) 17:44
Откуда: Дальний Восток, г. Ха

Сообщение Matew » 26.04.2007 (Чт) 6:23

А как на счет вот этого:
RegsvrEx
Регистратор COM(OLE,ActivX)-компонентов, альтернатива regsvr32.
В дополнение к возможностям regsvr32 позволяет зарегистрировать компонент
под текущим пользователем (актуально для Win2000/XP).
В этом случае для регистрации не требуются права администратора (т.к. вся
запись идет в ветку реестра текущего пользователя); однако
зарегистрированный таким образом компонент доступен только текущему
пользователю.

Для регистрации используется перекрытие ветки реестра HKEY_CLASSES_ROOT.
Эта ветка на NT+ системах фактически состоит из 2-х веток:
HKEY_LOCAL_MACHINE\SOFTWARE\Classes - для компьютера
и
HKEY_CURRENT_USER\Software\Classes - для пользователя
содержимое которых "складывается", при чем пользовательские значения перекрывают
системные. По-умолчанию запись идет в HKLM-часть; однако с помощью
ф-ции RegOverridePredefKey можно перенаправить на другую ветку, что и делает
данный регистратор.

Командная строка полностью совместима с командной строкой regsvr32, за исключением
добавления ключа /c (который и включает режим "CURRENT_USER"). Ф-ция RegOverridePredefKey
подгужается динамически, только при необходимости, и только если если она присутствует
в системе. Если ф-ция не найдена, но ключ /c задан - то он игнорируется.

Программа тестировалась на системах 2000 и XP, но не тестировалась на NT за неимением таковой.
RegOverridePredefKey там вроде отсутствует, поэтому регистратор будет работать полностью
аналогично regsvr32.
Вложения
regsvrex.zip
Альтернатива Regsvr32
(3.9 Кб) Скачиваний: 1114
Алкоголь и сканеры-ваши враги! Не верите-смотрите аватару :-)

Antonariy
Повелитель Internet Explorer
Повелитель Internet Explorer
Аватара пользователя
 
Сообщения: 4824
Зарегистрирован: 28.04.2005 (Чт) 14:33
Откуда: Мимо проходил

Сообщение Antonariy » 26.04.2007 (Чт) 9:29

Must have!
Хорошо бы в исходниках...
Лучший способ понять что-то самому — объяснить это другому.

GSerg
Шаман
Шаман
 
Сообщения: 14286
Зарегистрирован: 14.12.2002 (Сб) 5:25
Откуда: Магадан

Сообщение GSerg » 26.04.2007 (Чт) 10:10

Опять же, в Vista должен быть облом.
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

tyomitch
Пользователь #1352
Пользователь #1352
Аватара пользователя
 
Сообщения: 12822
Зарегистрирован: 20.10.2002 (Вс) 17:02
Откуда: חיפה

Сообщение tyomitch » 26.04.2007 (Чт) 10:28

Неа, вроде не должен быть.
Кто-нибудь, проверьте для интереса? А то у меня ещё некоторое время доступа к Висте не будет.
Изображение

Sergeant Pepper
Новичок
Новичок
 
Сообщения: 31
Зарегистрирован: 25.08.2006 (Пт) 8:49

Сообщение Sergeant Pepper » 26.05.2007 (Сб) 16:51

tyomitch писал(а):Неа, вроде не должен быть.
Кто-нибудь, проверьте для интереса?

Без отключения UAC (User Account Control) не регистрирует (с отключенным UAC не пробовал, так как это не представляет интереса для меня)

tyomitch
Пользователь #1352
Пользователь #1352
Аватара пользователя
 
Сообщения: 12822
Зарегистрирован: 20.10.2002 (Вс) 17:02
Откуда: חיפה

Сообщение tyomitch » 19.06.2007 (Вт) 10:05

http://msdn2.microsoft.com/en-us/library/ms973913.aspx

Registration-Free Activation of COM Components: A Walkthrough

Registration-free COM is a mechanism available on the Microsoft Windows XP (SP2 for .NET-based components) and Microsoft Windows Server 2003 platforms. As the name suggests, the mechanism enables easy (for example, using XCOPY) deployment of COM components to a machine without the need to register them.
Изображение

Antonariy
Повелитель Internet Explorer
Повелитель Internet Explorer
Аватара пользователя
 
Сообщения: 4824
Зарегистрирован: 28.04.2005 (Чт) 14:33
Откуда: Мимо проходил

Сообщение Antonariy » 19.06.2007 (Вт) 10:11

Хмм... Зачем дублировать ссылку, которая есть несколькими постами выше? :roll: Ее даже чуть-чуть обсудили...
Лучший способ понять что-то самому — объяснить это другому.

tyomitch
Пользователь #1352
Пользователь #1352
Аватара пользователя
 
Сообщения: 12822
Зарегистрирован: 20.10.2002 (Вс) 17:02
Откуда: חיפה

Сообщение tyomitch » 19.06.2007 (Вт) 10:41

Так там предположения предполагали про то, где манифесты работают.
А я показал, что в первом же абзаце статьи это явно написано.
Изображение

P@ladium
Начинающий
Начинающий
 
Сообщения: 21
Зарегистрирован: 07.09.2006 (Чт) 14:23

Сообщение P@ladium » 02.11.2007 (Пт) 4:09

Вот интересно ктонить эту статью проверял??
А то как я её не перечитывал ничего хорошего не выходило!!!
как только создаю client.exe.manifest
Код: Выделить всё
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">
<assemblyIdentity version="1.0.0.0" processorArchitecture="X86" name="Client.exe" type="win32"/>
   <dependency>
      <dependentAssembly>
         <assemblyIdentity type="win32" name="SideBySide.X" version="1.0.0.0"/>
      </dependentAssembly>
   </dependency>
</assembly>

Все время при запуске client.exe выдает "программа не запускается"
Мож у каво получилось

keks-n
Доктор VB наук
Доктор VB наук
Аватара пользователя
 
Сообщения: 2509
Зарегистрирован: 19.09.2005 (Пн) 17:17
Откуда: г. Москва

Сообщение keks-n » 02.11.2007 (Пт) 17:20

P@ladium
А ось какая?
Изображение

P@ladium
Начинающий
Начинающий
 
Сообщения: 21
Зарегистрирован: 07.09.2006 (Чт) 14:23

Сообщение P@ladium » 09.11.2007 (Пт) 22:15

WinXP SP2
В обшем проблему решил внедрением кода от Antonariy за что ему спасибо огромное!!!

Andrey Fedorov
Член-корреспондент академии VBStreets
Член-корреспондент академии VBStreets
 
Сообщения: 3287
Зарегистрирован: 21.05.2004 (Пт) 9:28
Откуда: Москва

Сообщение Andrey Fedorov » 06.02.2008 (Ср) 9:32

Sergeant Pepper писал(а):Без отключения UAC (User Account Control) не регистрирует (с отключенным UAC не пробовал, так как это не представляет интереса для меня)


А если запустить с правами администратора - те что по правой кнопочке мыши на имени файла? C Вистой на данную тему долго не копался, но по идее и под UAC все должно ставиться... Даже обычный инсталятор - только запускать его надо именно с правами администратора...
Фиг Вам! - Сказал Чебурашка, обгладывая Крокодила Гену...

След.

Вернуться в Раздел для Профессионалов

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 7

    TopList