2012-07-23 82 views
-4

DLL進程正在隔離的應用程序中運行。從第三個應用程序運行的域。 我想卸載的AppDomain卸載AppDomain

如果我使用Enviroment.Exit(),它也殺死了父親的應用程序(應用程序,它lauches的DLL進程)

編輯

這樣做,因爲它既不如下:

 AppDomain domainObj = AppDomain.CurrentDomain; 
     AppDomain.Unload(domainObj); 
+1

「DLL過程」沒有意義。你的意思是在另一個進程中的AppDomain?如果是這樣,你是否想從其進程或其他進程中卸載該AppDomain? – Richard 2012-07-23 15:02:32

+0

Process.Stop()? – negligible 2012-07-23 15:04:33

+0

是的,我想從其流程中卸載APP。 – kmxillo 2012-07-23 15:05:17

回答

0

如果從DLL函數運行在你的過程中單獨的AppDomain線程,那麼你可以嘗試調用AppDomain.Unload。根據文檔,

當一個線程調用Unload時,目標域被標記爲卸載。專用線程嘗試卸載域,並且域中的所有線程都會中止。如果一個線程不中止,例如因爲它正在執行非託管代碼,或者因爲它正在執行finally塊,那麼在一段時間之後CannotUnloadAppDomainException被拋出到最初稱爲Unload的線程中。如果無法中止的線程最終結束,則目標域不會被卸載。因此,在.NET Framework 2.0版中,域不能保證卸載,因爲它可能無法終止正在執行的線程。

所以,如果你無法成功卸載這個其他appdomain - 你可能不得不尋找其他的選擇。

+0

您的解決方案對我無效。 – kmxillo 2012-07-23 15:19:06