2010-12-02 23 views
1

我有一箇舊的VB6應用程序,我正在進入VB.Net,我也有一個從應用程序引用的COM程序集。覆蓋已註冊COM組件的用法

我希望能夠並行運行這兩個應用程序(舊的和.net的一個),問題是我對COM組件的簽名進行了一些更改以使其可以在.Net應用程序(這些更改與舊應用程序不兼容)。

如果我先安裝舊的應用程序,它會註冊dll並將其複製到System32中,當我安裝新的應用程序時,它將新的COM程序集複製到其應用程序文件夾中(在程序文件中),但是當我執行它時,它會嘗試加載舊程序集(由舊應用程序註冊)。

有什麼辦法可以讓新應用程序使用自己文件夾中的程序集?從而保留舊的應用程序(使用舊的應用程序(在system32上註冊的應用程序))。

我希望我明確自己。

非常感謝您的幫助。

回答

2

聽起來你忘了註冊COM服務器。但那會殺死舊應用程序。 COM中的一個硬性要求是當你改變它們時,你改變了共同類和接口的Guid。這可以確保不同的版本可以並排居住,而不會跺跺彼此的註冊表項。

無reg註冊COM清單將是另一種方式。儘管將清單放在一起並排除故障通常不是很有趣。

真的,真的便宜的把戲就是把COM服務器DLL放在與客戶端EXE相同的目錄下。並創建一個與.local文件擴展名的文件。如果主EXE命名爲mumble.exe,則該文件應命名爲mumble.exe.local。這足以讓COM解析器始終使用本地DLL,而不是記錄在註冊表中的路徑。這是documented here

+0

無註冊COM清單?我從來沒有聽說過。感謝您的提示 – willvv 2010-12-03 14:24:01

3

你不能給你的新舊COM對象有不同的GUID(CLSID),接口名稱,typelib名稱和類名(以及其他我忘記:))嗎?

即在新版本中,重命名一切,所以它不會在舊版本上註冊爲是,而不是一組獨立的對象,接口等

新的代碼可以再使用新對象和更新的接口,而舊代碼仍然可以使用舊對象和原始接口。

+0

謝謝,這就是我最終做的,更改DLL上的GUID並註冊兩者。 – willvv 2010-12-03 14:23:18