下载并实例化COM控件

本文关键字:控件 COM 实例化 下载 | 更新日期: 2023-09-27 17:49:30

我正在使用ff-activex-host来托管Firefox和Chrome中的. net ActiveX控件。它将实例化已注册的COM控件,或者在cab文件中下载一个控件,注册它,然后实例化COM控件。不幸的是,第一个意味着我不能用来自服务器的更改来更新控件的dll,第二个需要管理员权限。

我想扩展插件,以支持下载一个dll和实例化它不需要管理员权限,但我不知道如何去做。有人能举个例子吗?

我很乐意完全跳过COM层,而实例化底层的。net控件,但这意味着要重写部分插件,而且我所能找到的例子表明,无论如何,最好的通信方式是通过COM。你能给我指一个c++与。net组件交互的例子吗?我能找到的最好的是ExecuteInDefaultAppDomain,它似乎相当有限-我希望能够附加事件处理程序。

下载并实例化COM控件

不幸的是,COM DllRegisterServer入口点通常是硬编码的,以将组件注册安装到HKEY_CLASSES_ROOT hive中,这将导致它们在HKEY_LOCAL_MACHINE'Software'Classes中被创建,使得没有管理员访问就无法安装。

如果您提前知道将创建哪些COM注册,您可以直接在HKEY_CURRENT_USER'Software'Classes中自己创建密钥,而不是调用DllRegisterServer;这将允许您仅为没有管理权限的当前用户注册控件。

另一个选项,如果可能的话,我敦促您避免,将尝试修补内存中的windows注册表api,以将DllRegisterServer写入重定向到HKEY_CURRENT_USER'Software'Classes树。虽然这是可行的,但是修补这样的api是一项非常重要的工作,特别是在多线程应用程序中。