【发布时间】: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