【问题标题】:Updating a com dll更新 com dll
【发布时间】:2008-12-01 01:11:20
【问题描述】:

我们有一个使用 COM dll 的应用程序。现在,我们正在推送这个 dll 的更新。我们复制新的 dll(覆盖现有的)并注册 dll。这是一个好习惯吗?或者,我们应该先在客户端机器上取消注册 dll。

【问题讨论】:

    标签: com


    【解决方案1】:

    只要您的旧 COM dll 实现完全相同的接口,就没有理由取消注册/注册

    【讨论】:

      【解决方案2】:

      在更新 COM dll 时,我们不应更改旧接口,即 IID(COM 的基本规则),以免破坏使用旧接口的客户端。

      因此无需取消注册旧的 COM dll,只需注册新的 DLL。注册新的 dll 后,由于旧接口使用相同的 IID,它不会破坏使用旧接口的客户端。

      【讨论】:

        【解决方案3】:

        如果您只想替换 Com Dll,则必须考虑两件事:

        1. 旧的和新的具有相同的 GUID。
        2. 您尚未将任何新接口附加到更新的 com Dll。

        否则你应该取消注册/注册你的 com dll

        【讨论】:

          【解决方案4】:

          好吧,假设您正在使用 VB6 编写您的 COM 服务器(几年前的常见情况),您需要将其设置为二进制兼容,以使 VB 为组件保留相同的 GUID。

          由于大多数时候 DLL 中的类的对象是使用内置在同一个 dll 中的类工厂创建的,如果 GUID 与类工厂知道的不匹配,它甚至无法为旧的 GUID 创建对象如果没有对接口进行更改。

          那是 DLL 地狱的一部分,记得吗?

          【讨论】:

            【解决方案5】:

            如果您知道您的所有客户端平台都在运行 Windows XP 或更高版本,您可以考虑使用无注册 COM,从而避免整个问题。

            详情请见my answer to "How to register COM libraries at runtime?"。文章"Registration-Free Activation of COM Components: A Walkthrough" on MSDN 有完整的操作指南。

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2012-09-22
              • 1970-01-01
              • 2020-08-22
              • 2018-09-13
              • 2011-10-12
              • 2011-07-27
              相关资源
              最近更新 更多