卸载AppDomain

时间:2012-07-23 15:01:27

标签: c# process appdomain

DLL进程在隔离的应用程序中运行。从第3个应用程序运行的域。 我想卸载AppDomain

如果我使用Enviroment.Exit(),它还会杀死父应用程序(启动DLL进程的应用程序)

修改

不要这样做:

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

1 个答案:

答案 0 :(得分:0)

如果DLL中的函数作为进程中单独AppDomain中的线程运行,则可以尝试调用AppDomain.Unload。根据文件,

  

当线程调用Unload时,目标域将被标记为卸载。专用线程尝试卸载域,并且域中的所有线程都将中止。如果线程没有中止,例如因为它正在执行非托管代码,或者因为它正在执行finally块,那么在一段时间之后,在最初调用Unload的线程中抛出CannotUnloadAppDomainException。如果最终无法中止的线程结束,则不会卸载目标域。因此,在.NET Framework版本2.0域中不保证卸载,因为它可能无法终止执行线程。

因此,如果您无法成功卸载此其他应用程序域,则可能需要找到其他替代方案。