對於mscoree.dll程式集的引用請使用com引用:c:windowsmicrosoft.netframeworkvxxxxxxmscoree.tlb
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);
}
}
.net framework居然沒有提供託管的介面來擷取當前進程中的其它appdomain!所以,我們只有藉助承載介面(hosting interfaces)來完成這事了。
在mscoree.dll中,.net 1.0提供了一個icorruntimehost介面,該介面中有enumdomains和nextdomain方法,而幸運的是:mscoree.dll中居然直接提供了一個public的實現:corruntimehostclass。所以,我們只需要建立一個corruntimehostclass然後調用enumdomains和nextdomain