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

问题描述:

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

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

这个问题没有很好的100%的答案。取决于潜在的技术,有各种各样的惯例试图解决相关的问题。这些包括:

  • 的SharedDLLs注册表项,追踪引用计数
  • Windows安装部件计数(如果多个.msi程序包安装相同的组件,诸如从合并模块)
  • 其他包级参考方案
  • ,切勿从系统文件夹

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

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