如何遍历当前进程中的AppDomain

简介: .Net Framework居然没有提供托管的接口来获取当前进程中的其它AppDomain!所以,我们只有借助承载接口(Hosting Interfaces)来完成这事了。 在MSCOREE.DLL中,.Net 1.0提供了一个ICorRuntimeHost接口,该接口中有EnumDomains和NextDomain方法,而幸运的是:MSCOREE.DLL中居然直接提供了一个Public的实现:CorRuntimeHostClass。

.Net Framework居然没有提供托管的接口来获取当前进程中的其它AppDomain!所以,我们只有借助承载接口(Hosting Interfaces)来完成这事了。
在MSCOREE.DLL中,.Net 1.0提供了一个ICorRuntimeHost接口,该接口中有EnumDomains和NextDomain方法,而幸运的是:MSCOREE.DLL中居然直接提供了一个Public的实现:CorRuntimeHostClass。所以,我们只需要新建一个CorRuntimeHostClass然后调用EnumDomains和NextDomain方法即可:

public static IList<AppDomain> GetAppDomains()
{
    IList<AppDomain> list = new List<AppDomain>();
    IntPtr enumHandle = IntPtr.Zero;
    CorRuntimeHostClass host = new CorRuntimeHostClass();
    try
    {
        host.EnumDomains(out enumHandle);
        object domain = null;
        while (true)
        {
            host.NextDomain(enumHandle, out domain);
            if (domain == null) break;
            AppDomain appDomain = (AppDomain)domain;
            list.Add(appDomain);
        }
        return list;
    }
    catch (Exception e)
    {
        return null;
    }
    finally 
    {
        host.CloseEnum(enumHandle); 
        Marshal.ReleaseComObject(host); 
    }
}

对于MSCOREE.DLL程序集的引用请使用COM引用:C:\WINDOWS\Microsoft.NET\Framework\vXXXXXX\mscoree.tlb
有关MSCOREE.DLL更详细的介绍请参见 .NET中的幕后英雄:MSCOREE.DLL

相关文章
|
8月前
|
机器学习/深度学习 计算机视觉
YOLOv11改进策略【模型轻量化】| 替换骨干网络为 MobileViTv1高效的信息编码与融合模块,获取局部和全局信息
YOLOv11改进策略【模型轻量化】| 替换骨干网络为 MobileViTv1高效的信息编码与融合模块,获取局部和全局信息
280 9
YOLOv11改进策略【模型轻量化】| 替换骨干网络为 MobileViTv1高效的信息编码与融合模块,获取局部和全局信息
|
11月前
|
程序员 Go
go语言中if 语句
go语言中if 语句
187 3
|
存储 Kubernetes API
Kubernetes学习-核心概念篇(三) 核心概念和专业术语
Kubernetes学习-核心概念篇(三) 核心概念和专业术语
Kubernetes学习-核心概念篇(三) 核心概念和专业术语
|
监控 安全 Linux
centos常用指令
centos常用指令
|
机器学习/深度学习 搜索推荐 算法
【前沿解读】17篇2023淘天业务技术A类顶会论文(下)
【前沿解读】17篇2023淘天业务技术A类顶会论文(下)
451 3
|
消息中间件 缓存 IDE
MetaQ/RocketMQ 原理问题之消息队列中间件的问题如何解决
MetaQ/RocketMQ 原理问题之消息队列中间件的问题如何解决
193 61
|
人工智能 编解码 算法
【IJCAI 2023】流感知优化之 DAMO-StreamNet 论文解读
传统视频目标检测(Video Object Detection, VOD)是离线(offline)的检测任务,即仅考虑算法的检测精度,未考虑算法的延时。流感知(Streaming Perception)任务作为VOD的一个细分方向,采用流平均精度(Streaming Average Precision, sAP)指标,衡量算法的在线(online)检测能力,即同时衡量算法的精度和延时。本文针对现有的流感知工作在训练方式和模型感受野两方面的不足,提出了DAMO-StreamNet,在保证算法实时性的前提下,实现了SOTA的性能。
1444 6
【IJCAI 2023】流感知优化之 DAMO-StreamNet 论文解读
|
Python
【PythonWeb】两种方法、搭建自己的pypi服务器。内网的你,必须要会
【PythonWeb】两种方法、搭建自己的pypi服务器。内网的你,必须要会
|
自然语言处理 关系型数据库 MySQL
谷粒商城--整合Elasticsearch和商品的上架-1
谷粒商城--整合Elasticsearch和商品的上架
211 0
|
机器学习/深度学习 传感器 算法
【雷电附着算法】基于雷电附着优化算法LAPO求解单目标优化问题附matlab代码
【雷电附着算法】基于雷电附着优化算法LAPO求解单目标优化问题附matlab代码