Загрузите и создайте экземпляр COM-управления - PullRequest
1 голос
/ 06 апреля 2011

Я использую ff-activex-host для размещения элемента управления .NET ActiveX в Firefox и Chrome.Он создаст экземпляр зарегистрированного элемента управления COM или загрузит его в файл cab, зарегистрирует его, а затем создаст экземпляр элемента управления COM.К сожалению, первое означает, что я не могу обновить dll элемента управления с изменениями с сервера, а второе требует прав администратора.

Я хотел бы расширить плагин для поддержки загрузки dll и создания его экземпляров.не требуя прав администратора, но я не уверен, как это сделать.У кого-нибудь есть пример сделать это?

Я был бы рад полностью пропустить COM-уровень и создать вместо него базовый элемент управления .NET, но это означало бы переписывание частей плагина и примеров.Я смог найти предположение, что лучший способ общения в любом случае - через COM.Не могли бы вы указать мне на пример взаимодействия C ++ с компонентом .NET без COM?Лучшее, что я могу найти, это ExecuteInDefaultAppDomain , который кажется довольно ограниченным - я бы тоже хотел иметь возможность подключать обработчики событий.

1 Ответ

0 голосов
/ 06 апреля 2011

К сожалению, точка входа COM DllRegisterServer обычно жестко запрограммирована для установки регистраций компонентов в куст * HKEY_CLASSES_ROOT, что приведет к их созданию в HKEY_LOCAL_MACHINE\Software\Classes, что делает невозможным установку без доступа администратора.

Если вы заранее знаете, какие COM-регистрации будут созданы, вы можете напрямую создать ключи в HKEY_CURRENT_USER\Software\Classes самостоятельно, а не вызывать DllRegisterServer;это позволит вам зарегистрировать элемент управления только для текущего пользователя без прав администратора.

Другой вариант, которого я призываю вас избегать, если это возможно, заключается в попытке исправления API-интерфейсов реестра Windows в памяти для перенаправленияDllRegisterServer пишет в дерево HKEY_CURRENT_USER\Software\Classes.Хотя это будет работать, исправление таких API является нетривиальным упражнением, особенно если вы делаете это внутри многопоточного приложения.

...