51 lines
1.1 KiB
C#
51 lines
1.1 KiB
C#
using mscoree;
|
|
using System;
|
|
using System.Collections.Generic;
|
|
using System.Linq;
|
|
using System.Runtime.InteropServices;
|
|
using System.Text;
|
|
using System.Threading.Tasks;
|
|
|
|
namespace Xunit.Runner.Wpf
|
|
{
|
|
public static class AppDomains
|
|
{
|
|
public static IEnumerable<AppDomain> EnumAppDomains()
|
|
{
|
|
IntPtr enumHandle = IntPtr.Zero;
|
|
ICorRuntimeHost host = null;
|
|
|
|
try
|
|
{
|
|
host = GetCorRuntimeHost();
|
|
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);
|
|
}
|
|
}
|
|
}
|
|
|
|
private static ICorRuntimeHost GetCorRuntimeHost()
|
|
{
|
|
return (ICorRuntimeHost)Activator.CreateInstance(Marshal.GetTypeFromCLSID(new Guid("CB2F6723-AB3A-11D2-9C40-00C04FA30A3E")));
|
|
}
|
|
}
|
|
}
|