2011-04-06 68 views
1

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

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

我很乐意完全跳过COM层并实例化底层的.NET控件,但这意味着需要重新编写插件的一部分,并且我已经能够找到的示例表明最好的无论如何,通信方式都是通过COM进行的。你能否指向一个没有COM的.NET组件交互的C++示例?我能找到的最好的是ExecuteInDefaultAppDomain,这似乎非常有限 - 我希望能够附加事件处理程序。

回答

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并不是一件容易的事情,特别是在多线程应用程序中执行时。

相关问题