2009-03-06 102 views
3

我們正在使用COM對象自動化模型使我們的應用程序可供我們的客戶使用。註冊免費(Regfree)COM

他們大部分使用python來訪問我們的應用程序界面。由於我們希望能夠安裝(但尚未運行,這是另一個問題)不同版本的應用程序,因此我們正在將我們的COM組件更改爲無regfree。

但是這與從腳本語言通過IDispatch自動化訪問衝突,因爲它們需要註冊表中的條目。

我們的方法是創建一個應用程序來管理我們的實際應用程序的活動版本。它可以讓用戶決定他想要哪個版本,並負責註冊表項。

我們的方法有哪些替代方案?

回答

3

COM中有一個協議用於執行此操作。如果您版本接口(並更改每個版本的GUIDS),則可以安裝多個版本。 Microsoft使用WORD等進行此操作。

可以創建一個Word.Document.5類,該類專用於庫的版本5,或者只是word.Document,它將創建機器中存在的最高實例。我不確定這個功能是否構建到COM中,或者需要被強制執行,但是值得研究。

+0

版本控制解決方案當然很好,但我們決定不想更改每個版本的身份。它不能解決從腳本訪問應用程序的舊版本的問題。 – PsiX 2009-03-11 12:08:15

1

那麼答案是你自己建議的。您可以編寫一個具有COM組件所有版本的完整列表的應用程序。一旦用戶選擇了版本,您可以調用regsvr32應用程序來註冊該特定版本。

3

可以通過Microsoft.Windows.ActCtx對象訪問Regfree COM對象。

至於在註冊表中需要條目的IDispatch自動化 - 這不是嚴格正確的。我假定你正在使用默認的ATL實現IDispatchImpl。 我們通過提供我們自己的實現IRegFreeDispatchImpl解決了該解決方案,它使用manner suggested here中的activation context manipulation APIs將激活上下文激活/停用的所有入口點包裝到DLL中。