2009-03-06 99 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中。