4

場所Aで実行されている.NetクライアントでアクティベーションコンテキストAPIを使用して、場所Bにreg-freeのCOMコンポーネントをロードしています(これは、同じマシン上の兄弟/子孫などではなく、Aとは完全に異なる場所です)。 ACTCTX の場所 B を渡すと、正常に動作します。

ただし、別の COM dll を使用して同じことを行う必要があります。この COM dll は、完全に異なる場所にあるいくつかの .Net COM アセンブリに依存しています。

依存する .Net アセンブリをマニフェストに追加し、マニフェストと COM dll を場所 B に配置しましたが、依存する .Net アセンブリを場所 A (クライアントが実行される場所) に配置して動作させる必要があります。実際には、場所 A と場所 B とはまったく異なるディレクトリに存在します。

私がやろうとしていることは可能ですか?つまり、アクティベーション コンテキスト API を使用して、関連のない異なるディレクトリに複数の COM コンポーネントを読み込むことは可能ですか?

4

1 に答える 1

5

.NET は、ネイティブ COM と同様に、アクティブおよびプロセス アクティベーション コンテキストを調べて、reg-free メタデータ (<clrClass>など) を検出します。ただし、ネイティブ COM とは異なり、アクティブ化コンテキストに含まれる情報を使用して実際のファイルの場所を特定することはありません。そこでは、GAC のみを調べ、その後にクライアント EXE の隣にあるファイルの場所のみを調べていると思います。これは、おそらく Sysinternals Procmon を使用して確認できます。ハンスが提案した回避策を試すか、必要なアセンブリを手動でプロセスに事前にロードして、それが機能するかどうかを確認できると思います。私のシナリオでは、クライアントexeは制御できないネイティブexeであったため、これを試すことができませんでした。

于 2011-06-30T08:29:00.873 に答える