【发布时间】:2008-12-01 01:11:20
【问题描述】:
我们有一个使用 COM dll 的应用程序。现在,我们正在推送这个 dll 的更新。我们复制新的 dll(覆盖现有的)并注册 dll。这是一个好习惯吗?或者,我们应该先在客户端机器上取消注册 dll。
【问题讨论】:
标签: com
我们有一个使用 COM dll 的应用程序。现在,我们正在推送这个 dll 的更新。我们复制新的 dll(覆盖现有的)并注册 dll。这是一个好习惯吗?或者,我们应该先在客户端机器上取消注册 dll。
【问题讨论】:
标签: com
只要您的旧 COM dll 实现完全相同的接口,就没有理由取消注册/注册
【讨论】:
在更新 COM dll 时,我们不应更改旧接口,即 IID(COM 的基本规则),以免破坏使用旧接口的客户端。
因此无需取消注册旧的 COM dll,只需注册新的 DLL。注册新的 dll 后,由于旧接口使用相同的 IID,它不会破坏使用旧接口的客户端。
【讨论】:
如果您只想替换 Com Dll,则必须考虑两件事:
否则你应该取消注册/注册你的 com dll
【讨论】:
好吧,假设您正在使用 VB6 编写您的 COM 服务器(几年前的常见情况),您需要将其设置为二进制兼容,以使 VB 为组件保留相同的 GUID。
由于大多数时候 DLL 中的类的对象是使用内置在同一个 dll 中的类工厂创建的,如果 GUID 与类工厂知道的不匹配,它甚至无法为旧的 GUID 创建对象如果没有对接口进行更改。
那是 DLL 地狱的一部分,记得吗?
【讨论】:
如果您知道您的所有客户端平台都在运行 Windows XP 或更高版本,您可以考虑使用无注册 COM,从而避免整个问题。
详情请见my answer to "How to register COM libraries at runtime?"。文章"Registration-Free Activation of COM Components: A Walkthrough" on MSDN 有完整的操作指南。
【讨论】: