下载并实例化COM控件

时间:2011-04-06 16:23:37

标签: c# .net c++ com npapi

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

我想扩展插件以支持下载dll并在不需要管理员权限的情况下实例化它,但我不知道如何去做。有没有人有这样做的例子?

我很乐意完全跳过COM层并实例化底层的.NET控件,但这意味着重写部分插件,而我能够找到的示例表明最好的方法无论如何,通过COM进行沟通。你能否指出我在没有COM的情况下与.NET组件交互的C ++示例?我能找到的最好的是ExecuteInDefaultAppDomain,这似乎非常有限 - 我希望能够附加事件处理程序。

1 个答案:

答案 0 :(得分:0)

不幸的是,COM DllRegisterServer入口点通常是硬编码的,用于将组件注册安装到HKEY_CLASSES_ROOT配置单元中,这将导致它们在HKEY_LOCAL_MACHINE\Software\Classes中创建,从而无法安装没有管理员访问权限。

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

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