我有限的用戶,我需要編寫暴露在Outlook 2003中的C#庫和2007年COM互操作不regasm
我沒有任何管理privilges可言,甚至沒有在宏觀展望安裝時間,所以我不能運行RegAsm,我不能(我假設)編寫一個託管加載項。
在這種情況下,有沒有辦法從VBA中調用.Net代碼,還是有其他解決方案?
這是僅供個人使用,所以一個醜陋的黑客是完全可以接受的(只要它的作品)
我有限的用戶,我需要編寫暴露在Outlook 2003中的C#庫和2007年COM互操作不regasm
我沒有任何管理privilges可言,甚至沒有在宏觀展望安裝時間,所以我不能運行RegAsm,我不能(我假設)編寫一個託管加載項。
在這種情況下,有沒有辦法從VBA中調用.Net代碼,還是有其他解決方案?
這是僅供個人使用,所以一個醜陋的黑客是完全可以接受的(只要它的作品)
我通過運行regasm
和/regfile
選項解決了這個問題,並在生成的.reg
文件中用HKCU取代HKLM。
不幸的是,由於該COM工作就不可能安裝一個COM對象(互操作或其他方式)沒有管理員權限。
當您註冊com對象時,它將多個條目寫入HKEY_CLASSES_ROOT
這是一個機器級別密鑰,因此需要管理員權限。
現在,因爲您確實說過可以接受一個駭人的解決方案,您可以採取一些可行的步驟來實現它;但是,如果您沒有管理員權限,我假設這不是您的機器,並且很可能是工作機器。採取這些措施很可能會讓你被解僱。標準免責聲明和不適用:如果你是一個白癡並且自己被起訴/解僱/槍殺/搶劫/等等,那不是我的錯。
首先,您需要找出需要添加的註冊表項。確保你在一臺'乾淨'的機器上這樣做,而這臺機器以前沒有看到過你的組件(或者你知道沒有註冊表項)。安裝機器監控程序來捕獲密鑰。 Here是一個鏈接到[無關] MS文章,他們推薦一些應用程序來做到這一點。
現在隨着顯示器的運行安裝你的插件。您現在應該能夠獲得需要創建哪些密鑰的日誌。使用你的日誌創建註冊表導出文件。
現在這裏變得棘手。基本上你要做的是從BartPE鏡像啓動機器並掛載註冊表並運行你的腳本;然而,關鍵路徑將不正確,因此腳本無法「開箱即用」。
MS有一個TechNet文章(但鏈接有parens,所以它在這裏播放不好)所以Google它,它應該是第一個結果。
閱讀完該文章後,您將看到機器註冊表將作爲HKEY_LOCAL_MACHINE
的子項安裝。您需要做的是更改註冊表導出以匹配新路徑。只要此步驟完成,您應該能夠從您的BartPE映像引導,安裝註冊表,然後導入您的腳本,卸載配置單元,然後重新啓動。假設你將文件複製到正確的路徑,那麼它'應該'工作。
祝你好運。
我發現了一個可能的solution,但我還沒有時間去嘗試它。
註冊COM對象(例如ActiveX控件)並使其對系統中的所有用戶都可見需要管理權限。
但是,如果不需要所有用戶的可視性(或由於受限用戶限制而不可能),則只能爲特定用戶註冊COM對象。
這通常通過在HKCU而不是HKLM中註冊對象來完成。這將適用於「常規」COM對象以及通過.NET COM Interop公開的對象。
其他更細粒度的方法也退出了,已經提到的RegFree COM解決了一個特定的可執行文件。
因此,考慮到上述所有解決方案,將所有信息捕獲到reg文件並用HKCU取代HKLM應該可行(不好,但工具也是如此)。
我已經這樣做了。 – SLaks 2010-03-23 13:38:21
有RegistrationServices.RegisterAssembly
.NET API(我相信這是使用RegAsm.exe
)。
還有RegOverridePredefKey
的Win32 API,不起眼但非常有用的,它允許重新映射HKEY_CLASSES_ROOT
(由RegisterAssembly
使用)HKEY_CURRENT_USER\Software\Classes
。
一個聰明的程序可以使用RegistrationServices.RegisterAssembly
和RegOverridePredefKey
爲HKEY_CURRENT_USER
下的COM客戶端註冊程序集。
我還沒有嘗試過這個,但我相信這是相當可行的。
更新,顯然這種方法does works。
這是一個有趣的想法。我會試一試。 – 2014-04-15 08:43:01
我使用這種方法時得到的regasm輸出不包含任何HKLM密鑰,只有HKEY_CLASSES_ROOT,這也需要管理員權限才能寫入。你是否也找到了解決辦法,或者我的情況與你的情況截然不同? – 2011-11-26 21:03:57
嘿......沒關係,我發現它:HKCU \ Software \ Classes – 2011-11-26 21:06:33
你把DLL放在用戶機器上的哪個位置?它不需要運行gacutil(需要管理員權限)嗎? – 2014-04-14 13:54:38