0

答えはノーだと確信していますが、念のために:

適切なSxSマニフェストを持つスタンドアロンexeの場合、相対パスを使用してCOM DLLを参照したり、現在のディレクトリではないディレクトリからそれらをロードしたりすることはできますか?

共通フォルダーをルートとして使用して、さまざまなパッケージ(つまり、zipファイル)をデプロイするグリッド環境で動作しています。いくつかのアプリは、共通の場所から共通のCOM Api(DLLマニフェストを含む)を参照したいと考えています。ただし、グリッド環境はサンドボックス化されているため、Windows SxSディレクトリにインストールすることはできません。また、帯域外でインストールすることもできません(つまり、グリッドによって展開されません)。

.. \ SomeCommonDir \ COM.dllまたはC:\ Program Files \ SomeCommonDir \ COM.DLLからCOM.DLLをロードすると言う希望はありますか?

すべてがプライベートアセンブリとして正常に機能します。

4

1 に答える 1

1

これは、アクティベーションコンテキストを使用して可能になるはずです。(マニフェストなどは「標準」の方法で正常に動作させることができるように聞こえるので、問題ないと思います...)

ここに物事を行うための「ハードコア」な方法があります、またはあなたはMicrosoft.Windows.ActCtxオブジェクトを使うことができます。これらは両方とも、アクティベーションコンテキストのクライアントマニフェストの場所を手動/プログラムで設定できます。クライアントマニフェスト、アセンブリマニフェストおよびアセンブリと同じフォルダーにある必要があります。

このSOの質問はあなたに役立つかもしれません。そして、これを行う1つの方法の抜粋です...

// Create an activation context
Type actCtxType = System.Type.GetTypeFromProgID("Microsoft.Windows.ActCtx");
dynamic actCtx = System.Activator.CreateInstance(actCtxType);
actCtx.Manifest = @"Path\To\COMClient.manifest";

// Create the object you want, using the activation context
dynamic obj = actCtx.CreateObject("COMTestService.COMTestObject");

// Now use it!
var question = obj.GetQuestionFromAnswer(42);
于 2012-03-22T10:08:47.697 に答える