我们正在使用COM对象自动化模型向我们的客户提供我们的应用程序。
他们大部分都在使用python来访问我们的应用程序界面。
由于我们希望能够安装(尚未运行,这是另一个问题)不同版本的应用程序,我们正在将我们的COM组件更改为resfree。
但这与脚本语言通过IDispatch自动化的访问冲突,因为他们需要注册表中的条目。
我们的方法是创建一个管理我们实际应用程序的活动版本的应用程序。它允许用户决定他想要的版本,并负责注册表项。
我们的方法有哪些替代方案?
答案 0 :(得分:3)
COM中有一个协议用于执行此操作。如果您对接口进行版本控制(并更改每个版本的GUIDS),则可以安装多个版本。微软用WORD等做到这一点。
可以创建一个特定于库的版本5的Word.Document.5类,或者只创建word.Document,它将创建机器上存在最高的实例。我不确定这个功能是构建到COM还是需要被强制执行但是值得研究。
答案 1 :(得分:3)
可以通过Microsoft.Windows.ActCtx对象访问Regfree COM对象。
至于IDispatch自动化需要注册表中的条目 - 这不是严格正确的。我假设您正在使用默认的ATL实现IDispatchImpl。 我们通过提供我们自己的实现IRegFreeDispatchImpl解决了这个解决方案,它使用activation context manipulation APIs中的manner suggested here将所有入口点包装到DLL中,激活上下文激活/停用。
答案 2 :(得分:1)
答案是你自己建议的。您可以编写一个包含所有COM组件版本列表的应用程序。用户选择版本后,您可以调用regsvr32应用程序来注册该特定版本。