2012-08-04 55 views
1

我有一個名爲MyCOMAddin.tlb的類型庫,我使用的tlbexp.exe進行了解壓縮。這是一個用C#編寫的.NET COM暴露類。這個DLL是在每個用戶級別註冊。如何爲當前用戶註冊一個類型庫?

的問題是

  • 有沒有什麼辦法,我也可以註冊MyCOMAddin.tlb只是當前用戶?

我試過regtlibv12.exe,但它註冊了所有用戶。 這很不方便,因爲如果有任何用戶在機器上卸載外接程序,其他用戶仍然可以在後期綁定中訪問該dll,將無法再訪問類型庫。

我使用Inno安裝程序來部署加載項,所以我可以直接在註冊表中編寫密鑰。但我不知道哪些鍵以及在哪裏寫入。

我希望regtlibv12.exe/peruser選項。

+0

我不這麼認爲。程序文件和Windows是共享的。用戶有個人數據。 – Paparazzi 2012-08-05 00:18:55

+0

MyCOMAddin.dll在用戶級別註冊。爲什麼它的類型庫不能只爲當前用戶註冊? – Pierpaolo 2012-08-05 13:38:05

回答

1

這不是不可能的,但當然你會前進一些併發症。首先,僅在本地註冊類型庫是不夠的,您還需要在本地註冊CLSID,否則它將無法正常工作。 Regasm.exe完成的工作。不要贊成使用/ tlb命令行選項(沒有文件)來運行regtlib。並且要注意,無論編程工具使用類型庫是否需要一些額外的註冊表鍵來將庫識別爲組件,「控制」鍵通常是例如。

專業安裝人員不會依賴Regasm或Regtlib等工具在安裝時編寫密鑰,他們自己編寫密鑰。當然這需要知道這些密鑰是什麼。一種方法是觀察使用SysInternals的ProcMon實用程序編寫密鑰的安裝工具。雖然它往往會產生很多信息。您會在WiX project中找到專用工具,Heat.exe是「收穫」工具。修改您使用HKCR或HKLM改爲使用HKCU的方式。 HKCR映射到HKCU \ Software \ Classes。可能會添加用於64位操作系統的Wow6432Node。

而且確定你實際上需要註冊了類型庫。只有在另一個編程環境中使用該組件時纔有必要。在使用在STA線程上創建的對象並從另一個線程調用該對象的情況下,標準編組人員使​​用該類型庫來編組通話。並且不要忘記帶有清單的免註冊COM,因此完全不需要修改註冊表。目前尚不清楚這是否適用於此。

+0

嗨,我想註冊的類型庫,因爲這個COMAddin將被從VBA調用。你知道任何產生我形式的.reg文件的實用工具,包含我需要向註冊表註冊類型庫的所有條目嗎?如果我使用RegAsm.exe「MyCOMAddIn.ddl」/ regfile,會得到的結果類型。 RegAsm不會告訴我類型庫的條目,它只是列出註冊爲DLL的條目。 – Pierpaolo 2012-08-05 21:12:27

+0

我已經提到在我的回答中,添加/ tlb選項。 – 2012-08-05 21:15:44

+0

RegAsm.exe「MyComAddIn.dll」/ tlb/regfile不起作用,正如你指出的那樣。所以我不知道用什麼方法只爲tlb文件獲取帶有條目的.reg文件。 – Pierpaolo 2012-08-05 21:16:48