【问题标题】:On-the-fly upgrading a COM object used in a .NET application即时升级 .NET 应用程序中使用的 COM 对象
【发布时间】:2010-10-10 02:58:53
【问题描述】:

我们有一个大型、已部署的 3 层 .NET 应用程序,出于良好的业务原因,目前无法升级。客户端通过通常的互操作机制使用了许多经典的 c++ ActiveX 控件。

我们已经修复了其中一个 ActiveX 控件中的一些严重错误,并且需要将修复程序部署给许多客户,而无需重新安装客户端。允许使用补丁,包括升级 dll。有没有一种无需新客户端即可安装已修复错误的 ActiveX dll 的方法?界面、文件名、GUID等都没有改变。

我尝试仅替换 dll 没有成功 - 出现了各种奇怪的错误,但 ActiveX dll(仍在开发中)可能有缺陷 - 正在并行跟进。

应该简单地替换 dll 工作吗?如果没有,您能否建议另一种方法,而不是重建然后重新安装应该可以工作的客户端?

【问题讨论】:

  • 虽然您看到的错误对您来说可能看起来像中文,但它们可以为其他人提供重要的诊断。这就是他们的本意。任何事情都比“不起作用”要好。
  • 公平一点——它们不在错误报告中,但我应该能够得到它们。

标签: .net com interop activex


【解决方案1】:

如果界面没有改变,那么覆盖原来的 dll 就可以了。

【讨论】:

  • FWIW,我无法以这种方式完成这项工作。与 Microsoft MSDN Support 的广泛合作最终通过替换两个生成的互操作使其正常工作。我还是不明白为什么。而且我有兴趣找到一个参考来解释 C++->interop->COM 接口是如何工作的。
【解决方案2】:

在替换之前取消注册,然后重新注册。

regsvr32.exe /u [YOUR DLL HERE]

然后覆盖dll,然后

regsvr32.exe [YOUR DLL HERE]

【讨论】:

  • 据我所知,如果接口、名称和 GUID 相同,这应该没有任何影响。是吗?
  • 是的,我也认为这是对的,但它不会造成任何伤害,我可以发誓我遇到过一些看起来似乎没有必要但成功的案例。
猜你喜欢
  • 1970-01-01
  • 2011-06-15
  • 1970-01-01
  • 2012-02-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多