質問

で詳しく説明したように、マニフェスト ファイルを使用して登録不要の COM を実行します。 この他の質問.

今、プラグインをサポートするアプリケーションで登録不要の COM を使用しようとしています. 。プラグインは、メイン アプリケーションのインストール後にメイン アプリケーションのフォルダーに追加できる OCX ファイルです。

ただし、これは、プラグイン インストーラーによってメイン アプリケーションのマニフェスト ファイルにパッチを適用する必要があることを意味します。これは、特に複数のプラグインをインストールできる場合には、危険でエラーが発生しやすい行為のように思えます。

各プラグインが独自の部分を別個のファイルとして安全に追加できるように、メイン アプリケーションのマニフェスト ファイルを何らかの方法で分割する方法はありますか?それともマニフェスト ファイルにパッチを適用する別の安全な方法でしょうか?

関連する場合:インストーラーを作成します ウィックス.

役に立ちましたか?

解決

アプリケーションのマニフェスト ファイルを変更することはお勧めしません。これはかなり壊れやすいようで、書き込み可能な場所にある場合にのみ機能します。

プロセスの起動時に、アプリケーションのマニフェストを使用して、プロセス全体のアクティブ化コンテキストとしてプッシュされる「アクティブ化コンテキスト」が生成されます。ただし、各スレッドには直接操作できるアクティベーション コンテキスト スタックもあります。特定のスレッドでの操作では、COM 登録データを検索するときに、スタックの最上位のコンテキストとプロセス全体のアクティブ化コンテキストの両方が調べられます。

プラグイン コードが COM を呼び出す必要がある場合は常に、スレッド上でプラグイン固有のマニフェストをアクティブ化することをお勧めします。これは、次の 2 つの方法のいずれかを使用すると最も簡単に実行できます。

  1. プラグイン固有のマニフェストを ID2 マニフェストとしてプラグインに埋め込み、マクロでコンパイルします。 ISOLATION_AWARE_ENABLED 定義されています。これは基本的に、マニフェストからのコンテキストを必要とする一般的な Windows API をラップして、呼び出しに関する適切なアクティブ化コンテキストを自動的にアクティブ化および非アクティブ化します。

  2. プラグインへのすべてのエントリ ポイント周辺のスレッド上で、適切なアクティブ化コンテキストをアクティブ化/非アクティブ化します。これは、 アクティベーションコンテキストAPI. 。これはアクティベーションを使用するのが最も簡単です。 コンテキスト管理オブジェクト.

他のヒント

あなたは.NETを使用している場合は、

、あなたはコードが活性化の世話をするために、この答えに示すにを使用することができます文脈ます。

scroll top