如何遍历当前进程中的AppDomain

简介:

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

 

 
  1. public static IList GetAppDomains() 
  2.     IList list = new List(); 
  3.     IntPtr enumHandle = IntPtr.Zero; 
  4.     CorRuntimeHostClass host = new CorRuntimeHostClass(); 
  5.     try 
  6.     { 
  7.         host.EnumDomains(out enumHandle); 
  8.         object domain = null
  9.         while (true
  10.         { 
  11.             host.NextDomain(enumHandle, out domain); 
  12.             if (domain == nullbreak
  13.             AppDomain appDomain = (AppDomain)domain; 
  14.             list.Add(appDomain); 
  15.         } 
  16.         return list; 
  17.     } 
  18.     catch (Exception e) 
  19.     { 
  20.         return null
  21.     } 
  22.     finally  
  23.     { 
  24.         host.CloseEnum(enumHandle);  
  25.         Marshal.ReleaseComObject(host);  
  26.     } 

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



本文转自 powertoolsteam 51CTO博客,原文链接:http://blog.51cto.com/powertoolsteam/477795,如需转载请自行联系原作者

相关文章
|
API Windows 机器学习/深度学习
windows api学习笔记-遍历系统进程,获取进程名称和ID(进程快照)
#include //系统会自动连接到指定的库文件lib #include //声明快照函数的头文件 #include //std io 标准输入输出接口 #include using namespace std; int main() { PROCESSENTRY32 pe32; pe32.
1242 0
|
Shell Linux
内核模块遍历进程和任务队列保存到proc文件中
版权声明:您好,转载请留下本人博客的地址,谢谢 https://blog.csdn.net/hongbochen1223/article/details/45766609 实现一个模块用它遍历当前进程的父进程和任务队列,并将遍历的结果输出到一个proc 文件中(遍历可以从 current 当前进程开始,父进程遍历到初始化进程,遍历任务队列可以利用 for_each_process 宏)。
1178 0
<转>遍历 进程 内的内核对象
#ifndef UNICODE #define UNICODE #endif #include #include #define NT_SUCCESS(x) ((x) >= 0) #define STATUS_INFO_LENGTH_MISMATCH 0xc0000004...
716 0
|
5月前
|
监控 Linux 应用服务中间件
探索Linux中的`ps`命令:进程监控与分析的利器
探索Linux中的`ps`命令:进程监控与分析的利器
126 13
|
4月前
|
运维 关系型数据库 MySQL
掌握taskset:优化你的Linux进程,提升系统性能
在多核处理器成为现代计算标准的今天,运维人员和性能调优人员面临着如何有效利用这些处理能力的挑战。优化进程运行的位置不仅可以提高性能,还能更好地管理和分配系统资源。 其中,taskset命令是一个强大的工具,它允许管理员将进程绑定到特定的CPU核心,减少上下文切换的开销,从而提升整体效率。
掌握taskset:优化你的Linux进程,提升系统性能
|
4月前
|
弹性计算 Linux 区块链
Linux系统CPU异常占用(minerd 、tplink等挖矿进程)
Linux系统CPU异常占用(minerd 、tplink等挖矿进程)
167 4
Linux系统CPU异常占用(minerd 、tplink等挖矿进程)
|
3月前
|
算法 Linux 调度
探索进程调度:Linux内核中的完全公平调度器
【8月更文挑战第2天】在操作系统的心脏——内核中,进程调度算法扮演着至关重要的角色。本文将深入探讨Linux内核中的完全公平调度器(Completely Fair Scheduler, CFS),一个旨在提供公平时间分配给所有进程的调度器。我们将通过代码示例,理解CFS如何管理运行队列、选择下一个运行进程以及如何对实时负载进行响应。文章将揭示CFS的设计哲学,并展示其如何在现代多任务计算环境中实现高效的资源分配。
|
4月前
|
存储 缓存 安全
【Linux】冯诺依曼体系结构与操作系统及其进程
【Linux】冯诺依曼体系结构与操作系统及其进程
171 1