3

我们使用 COM 对象自动化模型使我们的应用程序可供客户使用。

他们大部分时间都在使用 python 来访问我们的应用程序接口。

由于我们希望能够安装(尚未运行,这是另一个问题)应用程序的不同版本,我们正在将我们的 COM 组件更改为无 regfree。

但这与通过 IDispatch 自动化从脚本语言访问相冲突,因为它们需要注册表中的条目。

我们的方法是创建一个应用程序来管理我们实际应用程序的活动版本。它让用户决定他想要哪个版本,并负责注册表项。

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

4

3 回答 3

3

COM 中有一个用于执行此操作的协议。如果您对接口进行版本化(并更改每个版本的 GUIDS),您可以安装多个版本。微软用 WORD 等来做到这一点。

可以创建一个特定于库版本 5 的 Word.Document.5 类,或者只创建一个 word.Document 类,它将创建机器上最高存在的实例。我不确定这个功能是内置在 COM 中还是需要实现,但值得研究。

于 2009-03-09T11:19:35.740 回答
3

Regfree COM 对象可以通过Microsoft.Windows.ActCtx对象访问。

至于需要注册表中条目的 IDispatch 自动化——这并不完全正确。我假设您使用的是默认的 ATL 实现,IDispatchImpl。我们通过提供我们自己的实现 IRegFreeDispatchImpl 解决了这个解决方案,它以此处建议的方式使用激活上下文操作 API将所有入口点包装到具有激活上下文激活/停用的 DLL 中。

于 2009-04-19T09:16:39.980 回答
1

好吧,答案是你自己建议的。您可以编写一个包含所有 COM 组件版本的完整列表的应用程序。用户选择版本后,您可以调用 regsvr32 应用程序来注册该特定版本。

于 2009-03-06T12:48:41.980 回答