【问题标题】:What are limitations of side-by-side COM?并行 COM 的限制是什么?
【发布时间】:2010-12-01 06:21:39
【问题描述】:

我们需要调整我们的应用程序以通过 ClickOnce 使用。该应用程序由一个 .exe 文件和大量 Visual C++ 库组成,其中一些是其他库使用的进程内 COM 服务器。

目前我们的安装程序使用regsvr32 来注册 COM 服务器,但看起来 ClickOnce 应用程序在安装期间不允许修改注册表。所以我们需要别的东西。

选项一是删除CoCreateInstance(),改为使用LoadLibraryEx()/DllGetClassObject()。这将需要修改代码,但非常可靠 - 我看不出有任何不可行的原因。

选项二是对清单使用并行 COM 激活。我立即看到的问题是我们在每个夜间构建中增加版本号,因此我们必须自动更新清单。这不是很鼓舞人心。使用并行 COM 激活还有哪些其他不那么明显的限制?

【问题讨论】:

  • 为什么必须更新清单?清单中的关键是 CLSID 到 dll 的映射,有一些程序集版本号需要考虑,但它们不会与 dll 嵌入式版本号进行交叉检查,因此清单一旦设置,可能会滞后很多。
  • @Chris Becke:真的吗?我一直希望对版本进行彻底检查,以避免 DLL 地狱。
  • 重要的是 .manifest 文件中的版本号,而不是 DLL 中的版本信息。您可以将所有 .manifest 版本号设置为 1.0.0.0,如果这样更容易的话。
  • 你问错问题了。您需要无注册的 COM,而不是 winxs。版本号无关紧要。它也没有任何限制。
  • @Hans Passant:两者都使用清单。好的。将 SxS 与无注册 COM 分开的细线在哪里?不就是一样的机制吗?

标签: windows visual-studio com clickonce side-by-side


【解决方案1】:

side-by-side COM 的优势在于它无需任何代码更改即可解决您的问题——可以将并排 COM 改进为一组现有的 COM 组件。

缺点:

  • Side-by-side 不是一种广泛使用的技术(除了一些组件,例如 VC++ 运行时库和不使用 COM 的 Windows 通用控件),它需要一些努力才能找到故障排除信息网络
  • 如果您使用的是 XP 或 Server 2003,那么当出现问题时,您无法从操作系统获得帮助。特别是,XP 在事件日志中给出了误导性消息; 2k3更好。 Vista 及以上版本为您提供 sxstrace 工具。
  • 您需要与组件本身并行维护清单文件。在许多方面,清单文件重复了类型库中已有的信息。尽管您可以手动维护它们(它们是具有相当简单架构的 XML 文件),但您可能希望在每次构建时重新生成它们。这可以解决版本控制问题。

【讨论】:

  • 不是这样的。 OP 一开始就错了,他说的是无注册的 COM,而不是 winxs。
  • 它们使用相同的机制 - 无注册 COM 是 WinSxS 的子集
  • 不是。他们都使用清单,这就是相似之处。
  • 我不确定我们说的是同一件事。你能发布一些指向 WinSxS 和无注册 COM 文档的链接吗?
  • MSDN上好的总结文章:.NETCOM
猜你喜欢
  • 1970-01-01
  • 2010-09-11
  • 2012-03-22
  • 2011-09-04
  • 2019-05-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-05-08
相关资源
最近更新 更多