检查DLL是否被其他应用程序使用

时间:2016-04-11 14:16:16

标签: installshield regsvr32 capicom

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

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

1 个答案:

答案 0 :(得分:1)

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

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

然而,这些仅在给定文件的单个位置时才起作用。在你的情况下,读取行之间,我怀疑capicom.dll有多个文件位置,但只有一个注册表位置用于其COM注册。因此,当您安装副本时,您可能会覆盖现有的COM注册。你的副本到位后,一切都很顺利。但是当您删除副本和/或取消注册时,COM注册不会恢复为以前的副本。

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