2

管理対象アプリケーション(dotNet 4)に挿入されるCで記述された管理対象外のdllがあります。_AppDomainsこのアプリで実行して、いくつかのモジュールをドメインにロードすることを列挙します。インターフェイスを使用してこれを行うことができICorRuntimeHostます。ただし、ICorRuntimeHostは非推奨であり、(http://msdn.microsoft.com/en-en/library/ms164320%28v=vs.100%29.aspxで説明されているように)に置き換えられていICLRRuntimeHostます。

_AppDomainを使用して列挙を実行するにはどうすればよいICLRRuntimeHostですか?出来ますか?

4

2 に答える 2

3

デバッグインターフェイスの中にはがありICorPublishます。

このICorPublish::GetProcess()メソッドを使用して、.NETプロセスのインスタンスを取得できICorPublishProcessます(それぞれのプロセスIDを渡すことで識別されます。もちろん、現在のプロセスのIDでもかまいません)。

このインターフェイスは、インスタンスICorPublishProcess::EnumAppDomains()への列挙子を介して、ターゲットプロセスの現在のアプリケーションドメインのリストを取得するために使用できるメソッドを提供しICorPublishAppDomainます。それぞれにICorPublishAppDomain.GetName()、アプリケーションドメインの名前を取得するメソッドがあります。

更新:私はこれを試していませんが、どうですか:

  • 上記のアプローチを使用してアプリドメインを列挙します(を介して一意のIDを取得することを含む ICorPublishAppDomain.GetID())。

  • そのドメインで実際にコードを実行するための使用ICLRRuntimeHost::ExecuteInAppDomain(必要なモジュールのロードを含む)。(最初の)パラメーターAppDomainIdは、から取得する値になりますICorPublishAppDomain.GetID()

codeplex.comのMicrosoftAll-In-OneCode Frameworkには、少なくとも関連する例(CppHostCLR)があるようです。

于 2013-03-18T14:48:01.633 に答える
2

推奨されるアプローチを使用します。独自のAppDomainManagerをIClrControl::SetAppDomainManagerTypeに登録し、ホストに登録し(を使用してAppDomainManagerInitializationOptions.RegisterWithHost)、AppDomain作成の通知を受信し、を介してドメインのアンロードを「リッスン」しますIActionOnCLREvent::OnEvent(Event_DomainUnload)

このようにして、各ドメイン(デフォルトのappdomainを含む)に「いくつかのコード」(ドメインマネージャー)が既にロードされています。

于 2014-12-27T11:20:05.983 に答える