C#:在程序集中循环通过appdomains
如何循环程序集中的appdomains?假设您的意思是“在过程中”。。。C#:在程序集中循环通过appdomains,c#,C#,如何循环程序集中的appdomains?假设您的意思是“在过程中”。。。AppDomain是一个非常重要的项目,您应该真正知道何时创建它,并跟踪/管理它的生命周期。要找到进程中的所有AppDomains不是一个简单的方法,好吧。假设您的意思是“在进程中”。。。AppDomain是一个非常重要的项目,您应该真正知道何时创建它,并跟踪/管理它的生命周期。要找到过程中的所有AppDomainAFAIK,没有一种简单的方法。来源: 您需要添加以下内容作为COM引用-~\WINDOWS\Microsoft
AppDomain
是一个非常重要的项目,您应该真正知道何时创建它,并跟踪/管理它的生命周期。要找到进程中的所有AppDomain
s不是一个简单的方法,好吧。假设您的意思是“在进程中”。。。AppDomain
是一个非常重要的项目,您应该真正知道何时创建它,并跟踪/管理它的生命周期。要找到过程中的所有AppDomain
AFAIK,没有一种简单的方法。来源:
您需要添加以下内容作为COM引用-~\WINDOWS\Microsoft.NET\Framework\v2.0.50727\mscor ee.tlb。这适用于currnet执行程序集。如果您想在进程之间循环,然后获取appdomain,那么这可能是不可能的
public void GetAllAppDomains()
{
AppDomain one = AppDomain.CreateDomain("One");
AppDomain two = AppDomain.CreateDomain("Two");
// Creates 2 app domains
List<AppDomain> appDomains = new List<AppDomain>();
IntPtr enumHandle = IntPtr.Zero;
CorRuntimeHostClass host = new CorRuntimeHostClass();
try
{
host.EnumDomains(out enumHandle);
object domain = null;
AppDomain tempDomain;
while (true)
{
host.NextDomain(enumHandle, out domain);
if (domain == null)
{
break;
}
tempDomain = domain as AppDomain;
appDomains.Add(tempDomain);
}
}
catch (Exception ex)
{
Console.WriteLine(ex.ToString());
}
finally
{
host.CloseEnum(enumHandle);
int rel= Marshal.ReleaseComObject(host);
}
Assembly[] assemblies;
foreach (AppDomain app in appDomains)
{
Console.WriteLine(app.FriendlyName);
assemblies = app.GetAssemblies();
Console.WriteLine("-----------------------Assemblies------------------");
foreach (Assembly assem in assemblies)
{
Console.WriteLine(assem.FullName);
}
Console.WriteLine("---------------------------------------------------");
}
}
public void GetAllAppDomains()
{
AppDomain one=AppDomain.CreateDomain(“一”);
AppDomain二=AppDomain.CreateDomain(“二”);
//创建2个应用程序域
List appDomains=新列表();
IntPtr enumHandle=IntPtr.Zero;
CorRuntimeHostClass主机=新CorRuntimeHostClass();
尝试
{
host.EnumDomains(out-enumHandle);
对象域=空;
AppDomain-tempDomain;
while(true)
{
host.NextDomain(enumHandle,out-domain);
如果(域==null)
{
打破
}
tempDomain=作为AppDomain的域;
appDomains.Add(tempDomain);
}
}
捕获(例外情况除外)
{
Console.WriteLine(例如ToString());
}
最后
{
host.CloseEnum(enumHandle);
int rel=Marshal.ReleaseComObject(主机);
}
装配[]装配;
foreach(appDomains中的AppDomain应用程序)
{
Console.WriteLine(app.FriendlyName);
assemblies=app.GetAssemblies();
Console.WriteLine(“------------------------------------程序集----------------”);
foreach(部件中的部件组装)
{
Console.WriteLine(组件全名);
}
Console.WriteLine(“-------------------------------------------------------------”;
}
}
来源:
您需要添加以下内容作为COM引用-~\WINDOWS\Microsoft.NET\Framework\v2.0.50727\mscor ee.tlb。这适用于currnet执行程序集。如果您想在进程之间循环,然后获取appdomain,那么这可能是不可能的
public void GetAllAppDomains()
{
AppDomain one = AppDomain.CreateDomain("One");
AppDomain two = AppDomain.CreateDomain("Two");
// Creates 2 app domains
List<AppDomain> appDomains = new List<AppDomain>();
IntPtr enumHandle = IntPtr.Zero;
CorRuntimeHostClass host = new CorRuntimeHostClass();
try
{
host.EnumDomains(out enumHandle);
object domain = null;
AppDomain tempDomain;
while (true)
{
host.NextDomain(enumHandle, out domain);
if (domain == null)
{
break;
}
tempDomain = domain as AppDomain;
appDomains.Add(tempDomain);
}
}
catch (Exception ex)
{
Console.WriteLine(ex.ToString());
}
finally
{
host.CloseEnum(enumHandle);
int rel= Marshal.ReleaseComObject(host);
}
Assembly[] assemblies;
foreach (AppDomain app in appDomains)
{
Console.WriteLine(app.FriendlyName);
assemblies = app.GetAssemblies();
Console.WriteLine("-----------------------Assemblies------------------");
foreach (Assembly assem in assemblies)
{
Console.WriteLine(assem.FullName);
}
Console.WriteLine("---------------------------------------------------");
}
}
public void GetAllAppDomains()
{
AppDomain one=AppDomain.CreateDomain(“一”);
AppDomain二=AppDomain.CreateDomain(“二”);
//创建2个应用程序域
List appDomains=新列表();
IntPtr enumHandle=IntPtr.Zero;
CorRuntimeHostClass主机=新CorRuntimeHostClass();
尝试
{
host.EnumDomains(out-enumHandle);
对象域=空;
AppDomain-tempDomain;
while(true)
{
host.NextDomain(enumHandle,out-domain);
如果(域==null)
{
打破
}
tempDomain=作为AppDomain的域;
appDomains.Add(tempDomain);
}
}
捕获(例外情况除外)
{
Console.WriteLine(例如ToString());
}
最后
{
host.CloseEnum(enumHandle);
int rel=Marshal.ReleaseComObject(主机);
}
装配[]装配;
foreach(appDomains中的AppDomain应用程序)
{
Console.WriteLine(app.FriendlyName);
assemblies=app.GetAssemblies();
Console.WriteLine(“------------------------------------程序集----------------”);
foreach(部件中的部件组装)
{
Console.WriteLine(组件全名);
}
Console.WriteLine(“-------------------------------------------------------------”;
}
}
这里的问题是什么?您想知道一个进程中运行了多少个应用程序域吗?要求是什么?试试这个:这里的问题是什么?您想知道一个进程中运行了多少个应用程序域吗?要求是什么?试试这个:+1,因为我甚至不认为这是可能的。+1,因为我甚至不认为这是可能的。