我有用 C 编写的非托管 dll,它将被注入(inject)托管应用程序 (dotNet 4)。我将枚举 _AppDomains
,在此应用程序中运行以将一些模块加载到域中。可以使用 ICorRuntimeHost
接口(interface)执行此操作。但是,ICorRuntimeHost
已弃用,并且(如 http://msdn.microsoft.com/en-en/library/ms164320%28v=vs.100%29.aspx 中所述)替换为 ICLRRuntimeHost
。
如何使用 ICLRRuntimeHost
执行 _AppDomain
枚举?可能吗?
最佳答案
调试接口(interface)中有ICorPublish
.
您可以使用 ICorPublish::GetProcess()
检索 .NET 进程的 ICorPublishProcess
实例的方法(通过传递相应的进程 ID 来标识,当然,它可以是当前进程的 ID)。
该接口(interface)提供方法ICorPublishProcess::EnumAppDomains()
,您可以使用它获取目标进程中当前应用程序域的列表,通过枚举器到 ICorPublishAppDomain
实例。每个都有 ICorPublishAppDomain.GetName()
获取应用程序域名称的方法。
更新:我没试过这个,但是怎么样:
使用上述方法枚举应用域(包括通过
ICorPublishAppDomain.GetID()
获取其唯一 ID)。使用
ICLRRuntimeHost::ExecuteInAppDomain
在该域中实际执行代码(包括加载您需要的模块)。 (第一个)参数AppDomainId
将是您从ICorPublishAppDomain.GetID()
获得的值。
在 Microsoft All-In-One Code Framework 中似乎有一个至少相关的示例 (CppHostCLR)在 codeplex.com 上
关于.net - CLR 托管。如何在 .net 4 中枚举 _AppDomains,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15478975/