我有用 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/