我有几个在安装过程中注册的COM组件。这些COM组件是合并模块的一部分,我将其包含在WIX项目中。我使用了以下代码进行注册
<InstallExecuteSequence>
<RegisterClassInfo/>
<RegisterProgIdInfo/>
<RegisterTypeLibraries/>
<WriteRegistryValues/>
</InstallExecuteSequence>
组件已成功注册。但是,在卸载过程中,这些 COM 组件未取消注册。在卸载之前,如何确保当共享DLL计数为1时,这些组件已取消注册?
呃,我刚刚经历了一大堆关于 COM 的箍。
实际上,您不应该再在系统上注册COM组件。它导致的问题比解决的问题多得多。注册 COM 组件时,会全局注册它们,这可能会从其他应用程序劫持该 COM 库的组件注册。希望这不会发生,但你不能确定。
自Windows XP以来,有一种称为无注册表COM注册的东西。为此,您需要为应用程序使用的每个 COM 库提供清单文件。还需要为应用程序提供一个清单文件,该文件声明应用对这些 COM 库的依赖关系。
这样做的好处是,您可以在应用程序的安装文件夹中部署 COM 库,而无需系统注册。
以下 URL 可帮助你创建所需的清单文件:
- COM 组件的免注册激活:演练
- 通过 ClickOnce 和免注册 COM 简化应用部署
- 清单文件参考
- 微星写作指南
如果您需要任何进一步的信息,请告诉我。我能够使用旧的 VB6 COM 组件成功部署我的应用程序,而无需在 Windows 注册表中全局注册它们并在应用程序的安装文件夹中部署 COM 库(而不是 %windir%system32
或 %windir%SysWow64
(在 64 位窗口上)。