Я уточняю это так:
using System.Runtime.InteropServices;
using mscoree;
public static IEnumerable<AppDomain> EnumAppDomains()
{
IntPtr enumHandle = IntPtr.Zero;
ICorRuntimeHost host = null;
try
{
host = new CorRuntimeHostClass();
host.EnumDomains(out enumHandle);
object domain = null;
host.NextDomain(enumHandle, out domain);
while (domain != null)
{
yield return (AppDomain)domain;
host.NextDomain(enumHandle, out domain);
}
}
finally
{
if (host != null)
{
if (enumHandle != IntPtr.Zero)
{
host.CloseEnum(enumHandle);
}
Marshal.ReleaseComObject(host);
}
}
}
Назовите это так:
foreach (AppDomain appDomain in EnumAppDomains())
{
// use appDomain
}
Не забудьте ссылаться на COM-объект \ WINDOWS \ Microsoft.NET \ Framework \ vXXX \ mscoree.tlb, установить для ссылки mscoree "Embed Interop Types" значение "False".