Any Application不使用如何检测DLL

时间:2012-07-19 07:18:43

标签: c++ dll

我有一个DLL,它调用在下面运行的应用程序。此DLL由几个其他应用程序/进程同时加载。 所以,基本架构是:

enter image description here

我的问题是如果使用DLL的应用程序崩溃,我想在我的基本应用程序中执行退出序列并退出它。 如何检测到任何应用程序不再使用此DLL? 有没有像我可以跟踪的DLL的加载计数? 另一个小问题是我可能需要通过C#应用程序来监控它,但这是另一回事。

3 个答案:

答案 0 :(得分:1)

如果您可以使用外部程序进行检查,则可以使用以下命令: http://technet.microsoft.com/en-us/sysinternals/bb896656

答案 1 :(得分:1)

您的图片不适合Windows中真正发生的事情。每个进程都有自己的DLL副本。 DLL中的代码在RAM中共享,但不在其数据中共享。有一些方法可以共享数据,但这并不常见,内存映射文件是更典型的方法。

Windows没有提供廉价的方法来查明DLL是否已加载到进程中。也没有通知机制。无论你做什么,它都必须先从流程开始。这也适用于C#,您可以使用Process.Modules property

只是跟踪你知道加载DLL的进程可能就足够了,当进程不再运行时,你可以安全地假设它不再加载DLL。使用Process.Exited事件或使用WMI,如this answer

所示

答案 2 :(得分:0)

您可以在基本应用程序中托管DLL,并使用共享部分实现您自己的引用计数,简单且经常使用。如前所述,一种可能性是在DLL entry point内实现引用计数,并根据您的规范检测DLL_PROCESS_DETACH,DLL_THREAD_DETACH,DLL_PROCESS_DETACH等。