2012-10-23 96 views
3

如何從屬於另一個進程的內存中卸載DLL,或者進程已經結束但該DLL仍然被加載到內存中?從內存中卸載DLL

我知道如何找到現有的進程,甚至列出所有加載的DLL的,但我似乎無法得到的是如何找到加載的DLL並從內存中卸載它們。

我讀過的所有內容都會談到AppDomains,但我不確定這種情況是否適用於該方法,因爲我想關閉未被我的應用程序調用的DLL。

任何幫助,將不勝感激。

+0

要做到這一點,我用MAF,你可以閱讀更多關於MAF [這裏] [1] [1]:http://stackoverflow.com/questions/835182/choosing-between-mef- and-maf-system-addin –

回答

1

我不認爲你可以卸載一個程序集。但是您可以卸載包含程序集的AppDomain。

0

除非進程退出,否則不能卸載以域中立方式加載的共享DLL。域特定的DLL與域一起卸載。然而,即使DLL已經被加載僅用於反射,也無法卸載各個DLL。

+0

因此,即使在第一個地方加載dll的進程已退出,我無法卸載應用程序關閉/崩潰時未卸載的dll。 – user1769189

+0

您是否在同一進程中的多個應用程序域或跨多個進程使用DLL?如果DLL已經以共享模式加載,除非所有AppDomain卸載,否則它不會卸載。 – jags