3

マニフェストを使用して、COMサーバー( reg-free COM )への依存関係を指定したいと思います。

コンシューマーアプリケーションは、COMサーバーがなくてもほとんど正常に動作します。その機能の1.7%程度だけがCOMサーバーを使用します。したがって、昔ながらのregsvr32方法では、ユーザーが呼び出しをトリガーする何かを実行しCoCreateInstance()、その時点でコンシューマーにエラーメッセージが表示されるまで、正常に起動して動作します。

マニフェストをしばらく試してみましたが、依存しているCOMサーバーアセンブリがファイルシステムに存在しない限り、コンシューマーは起動しないようです。それは良くないね。

次の内容の「追加マニフェスト」を追加しました。

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">
   <dependency>
       <dependentAssembly>
           <assemblyIdentity
              type="win32"
              name="TheComServer.X"
              version="1.0.0.0"/>
       </dependentAssembly>
   </dependency>
</assembly>

マニフェストでreg-freeCOMを使用し、依存関係をオプションにする方法はありますか?これにより、コンシューマープログラムが起動し、CoCreateInstance()実際に呼び出されるまで正常に動作しますか?

4

1 に答える 1

3

少なくとも、reg-free COM アセンブリのマニフェストを提供する必要があります。

アプリケーション マニフェストは、アプリケーションが必要とするアセンブリを参照し (コンポーネント マニフェストはアプリケーションの起動時に処理されます)、アセンブリがエクスポートする com オブジェクトを指定します。

これら、アクティベーション コンテキストが読み込まれるときに指定する必要があります。

アクティベーション コンテキスト API を使用して、アクティベーション コンテキストを手動で作成し、そこにアセンブリをロードしてから、CoCreateInstance を試行するときにそのコンテキストが最新であることを確認できます。

于 2010-05-24T18:14:03.110 に答える