2011-04-06 56 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並不是一件容易的事情,特別是在多線程應用程序中執行時。