CLR托管。如何在.net 4中枚举_AppDomains

时间:2013-03-18 14:16:20

标签: .net clr unmanaged clr-hosting

我有用C编写的非托管dll,它将被注入托管应用程序(dotNet 4)。我将枚举_AppDomains,在此应用程序中运行以将一些模块加载到域中。可以使用ICorRuntimeHost接口执行此操作。但是,ICorRuntimeHost已弃用,并且(如http://msdn.microsoft.com/en-en/library/ms164320%28v=vs.100%29.aspx所述)已替换为ICLRRuntimeHost

如何使用_AppDomain执行ICLRRuntimeHost枚举?有可能吗?

2 个答案:

答案 0 :(得分:3)

在调试接口中有ICorPublish

您可以使用ICorPublish::GetProcess()方法检索.NET进程的ICorPublishProcess实例(通过传递相应的进程ID来标识,当然,这可以是当前进程的ID)。

该接口提供方法ICorPublishProcess::EnumAppDomains(),您可以使用枚举器向ICorPublishAppDomain实例获取目标进程中当前应用程序域的列表。每个方法都有ICorPublishAppDomain.GetName()方法,可以获取应用程序域的名称。

更新:我还没试过,但是怎么样:

在codeplex.com上Microsoft All-In-One Code Framework以上似乎有一个(至少是相关的)示例(CppHostCLR)

答案 1 :(得分:2)

我会使用推荐的方法:您使用IClrControl::SetAppDomainManagerType注册自己的AppDomainManager,使其注册到主机(使用AppDomainManagerInitializationOptions.RegisterWithHost),接收AppDomain创建通知和" listen&#34 ;通过IActionOnCLREvent::OnEvent(Event_DomainUnload)进行域名卸载。

那样,你已经有了#34;一些代码" (域管理器)加载到每个域(包括默认的appdomain)。