无需注册(Regfree)COM

3
我们正在使用COM对象自动化模型,使我们的应用程序可供客户使用。
他们大多数情况下使用python来访问我们的应用程序接口。
由于我们希望能够安装(尚未运行,这是另一个问题)不同版本的应用程序,因此我们正在将我们的COM组件更改为regfree。
但这与通过IDispatch自动化从脚本语言访问冲突,因为他们需要注册表中的条目。
我们的方法是创建一个应用程序,该应用程序管理我们实际应用程序的活动版本。它让用户决定他想要哪个版本,并处理注册表条目。
我们的方法有什么替代方案吗?
3个回答

3
Regfree COM对象可以通过Microsoft.Windows.ActCtx对象访问。
至于IDispatch自动化需要在注册表中输入的问题-- 这并不严格正确。我假设您使用的是默认的ATL实现,即IDispatchImpl。 我们通过提供我们自己的实现,即IRegFreeDispatchImpl,解决了这个问题,它使用激活上下文操作API此处建议的方式将所有入口点包装进DLL中进行激活上下文激活/停用。

3

在COM中有一个协议可以实现这一点。如果对接口进行版本控制(并更改每个版本的GUID),则可以安装多个版本。Microsoft就是这样做的,例如WORD等。

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


版本控制方案当然很好,但我们决定不想为每个版本更改标识。而且它并不能解决从脚本访问旧版本应用程序的问题。 - PsiX

1

好的,答案已经由你自己提供了。你可以编写一个应用程序,其中包含所有版本的COM组件的完整列表。一旦用户选择了一个版本,你就可以调用regsvr32应用程序来注册该特定版本。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接