0

我正在capicom.dll通过我的安装程序注册并在卸载我的产品时取消注册。还有另外一个第三方软件“ABC”,也注册并使用了这个DLL。

但问题是,当我卸载自己的产品时,我注销了 capicom.dll。因此,另一个第三方软件“ABC”无法正常工作。那么如何在注销时检查此 DLL 是否被另一个产品/应用程序使用?

4

1 回答 1

1

这个问题没有很好的 100% 答案。根据正在使用的底层技术,有各种约定试图解决相关问题。这些包括:

  • SharedDLLs 注册表项,用于跟踪引用计数
  • Windows Installer 组件计数(如果多个 .msi 包安装相同的组件,例如来自合并模块)
  • 其他包级参考方案
  • 从不从系统文件夹卸载

但是,这些仅在给定文件只有一个位置时才有效。在您的情况下,在字里行间阅读,我怀疑 capicom.dll 有多个文件位置,但它的 COM 注册只有一个注册表位置。因此,当您安装副本时,您可能会覆盖现有的 COM 注册。当您的副本就位时,一切都很好。但是,当您删除副本和/或取消注册时,COM 注册不会恢复到以前的副本。

假设您不能确保只有一个 capicom.dll 的文件副本,我能想到的最佳选择是在引用 capicom.dll 的私有副本的可执行文件上使用免注册 COM 清单,并跳过注册您的私有副本capicom.dll 的。InstallShield 可以帮助您创建外部清单,或者您可以自己创建清单并将其嵌入到您的可执行文件中。如果您自己公开需要加载 capicom 的 inproc COM 服务器,请额外注意验证激活上下文是否有效。

于 2016-04-13T12:30:44.587 回答