アプリケーション レベルのアドインのアーキテクチャ

更新 : 2007 年 11 月

対象

このトピックの情報は、指定された Visual Studio Tools for Office プロジェクトおよび Microsoft Office のバージョンにのみ適用されます。

プロジェクトの種類

  • アプリケーション レベルのプロジェクト

Microsoft Office のバージョン

  • 2007 Microsoft Office system

  • Microsoft Office 2003

詳細については、「アプリケーションおよびプロジェクトの種類別の使用可能な機能」を参照してください。

Visual Studio Tools for Office を使用して作成するアドインには、信頼性とセキュリティの向上に役立つアーキテクチャ要素があり、それらを Microsoft Office と緊密に連携させることができます。このトピックでは、Visual Studio Tools for Office アドインの以下の点について説明します。

  • アドインについて

  • アドインのコンポーネント

  • アドインと 2007 Microsoft Office system の連携

  • アドインと Microsoft Office 2003 の連携

  • Outlook 2003 アドインのシャットダウン動作

Visual Studio Tools for Office アドインの概要については、「Office ソリューションの開発の概要」および「アプリケーション レベルのアドインのプログラミングについて」を参照してください。

アドインについて

Visual Studio Tools for Office を使用してアドインを作成するときには、Microsoft Office アプリケーションが読み込むマネージ コード アセンブリを作成します。アセンブリが読み込まれると、アドインがアプリケーションで発生するイベント (ユーザーがメニュー項目をクリックした場合など) に応答できます。アドインでは、オブジェクト モデルを呼び出してアプリケーションの自動化や拡張を行うこともでき、さらに .NET Framework のクラスも使用できます。

アセンブリは、アプリケーションのプライマリ相互運用機能アセンブリを介してアプリケーションの COM コンポーネントとの通信を行います。詳細については、「Office プライマリ相互運用機能アセンブリ」および「Office ソリューションの開発の概要」を参照してください。

Visual Studio Tools for Office は、各アドインをそれぞれ異なるアプリケーション ドメインに読み込みます。このため、1 つのアドインが正しく動作しない場合でも、それが原因で他のアドインにエラーが発生することはありません。また、アプリケーションが閉じている場合には、すべてのコードが停止され、アセンブリがメモリから確実にアンロードされます。アプリケーション ドメインの詳細については、「アプリケーション ドメインの概要」を参照してください。

Bb386298.alert_note(ja-jp,VS.90).gifメモ :

Visual Studio Tools for Office を使用して作成するアドインは、エンド ユーザーがホスト Microsoft Office アプリケーションを起動したときのみ使用されることを目的としています。アプリケーションがプログラムで起動された場合 (オートメーション機能を使用する場合など)、アドインは予期したとおりに動作しないことがあります。

アドインのコンポーネント

アドインのメイン コンポーネントはアドイン アセンブリですが、Microsoft Office アプリケーションがアドインを検出して読み込むときに重要な役割を果たすコンポーネントが他にもいくつかあります。

レジストリ エントリ

Microsoft Office アプリケーションは、一連のレジストリ エントリを検索してアドインを検出します。それらのレジストリ エントリは、ほとんどが Microsoft Office の 2003 リリースと 2007 リリースに共通ですが、1 つだけ異なるキーがあります。

  • 2007 Microsoft Office system のアプリケーションは、HKEY_CURRENT_USER\Software\Microsoft\Office\application name\Addins\add-in ID (Visio の場合は HKEY_CURRENT_USER\Software\Microsoft\Visio\Addins\add-in ID) レジストリ キーの下にある Manifest エントリを検索します。Manifest エントリには、配置マニフェストの完全パスが指定されます。

  • Microsoft Office 2003 アプリケーションは、HKEY_CURRENT_USER\Software\Microsoft\Office\application name\Addins\add-in ID (Visio の場合は HKEY_CURRENT_USER\Software\Microsoft\Visio\Addins\add-in ID) レジストリ キーの下にある ManifestName エントリと ManifestLocation エントリを検索します。これらのエントリには、アプリケーション マニフェストの場所と名前が指定されます。

ソリューションをビルドすると、Visual Studio Tools for Office によって開発用コンピュータ上に必要なレジストリ エントリが作成されるので、アドインを簡単にデバッグおよび実行できます。詳細については、「Office ソリューション ビルド処理の概要」を参照してください。 

アドインで使用されるレジストリ エントリの完全な一覧については、「アプリケーション レベルのアドインのレジストリ エントリ」を参照してください。

Bb386298.alert_note(ja-jp,VS.90).gifメモ :

Microsoft Office 2003 用の Visual Studio Tools for Office アドインを配置すると、レジストリ キーを HKEY_CURRENT_USER ではなく HKEY_LOCAL_MACHINE の下に作成することにより、コンピュータ上のすべてのユーザーがそのアドインを使用できるようになります。ただし、アドインを HKEY_LOCAL_MACHINE の下に登録することによってコンピュータ上のすべてのユーザーに対して 2007 Microsoft Office system の Visual Studio Tools for Office アドインを配置することはできません。2007 Microsoft Office system のアプリケーションは、HKEY_CURRENT_USER に登録された Visual Studio Tools for Office アドインのみを認識します。

配置マニフェストとアプリケーション マニフェスト

アドインは、配置マニフェストとアプリケーション マニフェストを使用して、最新バージョンのアドイン アセンブリを特定し、読み込みます。配置マニフェストは、最新のアプリケーション マニフェストを指します。アプリケーション マニフェストは、アドイン アセンブリを指し、エントリ ポイント クラスを指定して、アセンブリ内で実行します。詳細については、「Office ソリューションにおけるアプリケーション マニフェストと配置マニフェスト」を参照してください。

Visual Studio Tools for Office ランタイム

Visual Studio Tools for Office で作成したアドインを実行するには、エンド ユーザーのコンピュータに Visual Studio Tools for Office ランタイムがインストールされている必要があります。このランタイムには、アンマネージ コンポーネントと一連のマネージ アセンブリが含まれています。アンマネージ コンポーネントは、アドイン アセンブリを読み込みます。これらのマネージ アセンブリにより、アドイン コードがホスト アプリケーションを自動化して拡張するために使用するオブジェクト モデルが提供されます。

詳細については、「Visual Studio Tools for Office Runtime の概要」を参照してください。

アドインと 2007 Microsoft Office system の連携

ユーザーが 2007 Microsoft Office system のアプリケーションを起動すると、アプリケーションは配置マニフェストとアプリケーション マニフェストを使用してアドイン アセンブリの最新バージョンを検出し、読み込みます。アドインの基本アーキテクチャを次の図に示します。

2007 Microsoft Office system のアドイン アーキテクチャ
2007 Office アドイン アーキテクチャ

読み込みプロセス

ユーザーがアプリケーションを起動すると、次の処理が行われます。

  1. アプリケーションは、Visual Studio Tools for Office を使用して作成されたアドインを特定するレジストリ エントリをチェックします。

  2. 該当するレジストリ エントリが見つかると、アプリケーションは VSTOEE.dll を読み込み、VSTOEE.dll が VSTOLoader.dll を読み込みます。これらは、Microsoft Visual Studio Tools for the Microsoft Office system (version 3.0 Runtime) のローダー コンポーネントであるアンマネージ DLL です。詳細については、「Visual Studio Tools for Office Runtime の概要」を参照してください。

  3. VSTOLoader.dll は .NET Framework を読み込み、Visual Studio Tools for Office ランタイムのマネージ部分を起動します。

  4. Visual Studio Tools for Office ランタイムは、マニフェストの更新をチェックし、最新のアプリケーション マニフェストおよび配置マニフェストをダウンロードします。

  5. Visual Studio Tools for Office ランタイムは、一連のセキュリティ チェックを実行します。詳細については、「Office ソリューションにおけるセキュリティ (2007 システム)」を参照してください。

  6. アドインを信頼して実行できる場合、Visual Studio Tools for Office ランタイムは配置マニフェストとアプリケーション マニフェストを使用して、アセンブリの更新をチェックします。アセンブリの新しいバージョンが見つかった場合は、ランタイムがそのバージョンをクライアント コンピュータの ClickOnce キャッシュにダウンロードします。詳細については、「Office ソリューションの配置 (2007 システム)」を参照してください。

  7. Visual Studio Tools for Office ランタイムがアドイン アセンブリの読み込み先となる新しいアプリケーション ドメインを作成します。

  8. Visual Studio Tools for Office ランタイムがそのアプリケーション ドメインにアドイン アセンブリを読み込みます。

  9. Visual Studio Tools for Office ランタイムがアドインの RequestComAddInAutomationService メソッドを呼び出します (このメソッドをオーバーライドしている場合)。

    このメソッドをオーバーライドして、アドイン内のオブジェクトを他の Microsoft Office ソリューションに公開することもできます。詳細については、「他の Office ソリューションからのアプリケーション レベルのアドインのコードの呼び出し」を参照してください。

  10. Visual Studio Tools for Office ランタイムがアドインの RequestService メソッドを呼び出します (このメソッドをオーバーライドしている場合)。

    このメソッドをオーバーライドして、機能拡張インターフェイスを実装するオブジェクトを返すことにより、2007 Microsoft Office system の機能を拡張することもできます。詳細については、「機能拡張インターフェイスによる UI 機能のカスタマイズ」を参照してください。

  11. Visual Studio Tools for Office ランタイムがアドイン内の ThisAddIn_Startup メソッドを呼び出します。このメソッドは、Startup イベントの既定のイベント ハンドラです。詳細については、「Visual Studio Tools for Office プロジェクトのイベント」を参照してください。

Bb386298.alert_note(ja-jp,VS.90).gifメモ :

Visual Studio Tools for Office ランタイムが、ホスト アプリケーションによってサポートされる機能拡張インターフェイスごとに RequestService メソッドを呼び出します。RequestService メソッドの最初の呼び出しは、通常は ThisAddIn_Startup の呼び出しの前に行われますが、アドインでは RequestService メソッドが呼び出される時点や回数を推測することはできません。

アドインと Microsoft Office 2003 の連携

ユーザーが Microsoft Office アプリケーションを起動すると、アプリケーションはアプリケーション マニフェストの情報を使用して (場合によっては配置マニフェストの情報も使用して) アドイン アセンブリを読み込みます。Microsoft Office 2003 アプリケーションのアドインに関する基本アーキテクチャを、次の図に示します。

Microsoft Office 2003 のアドイン アーキテクチャ
Office 2003 アドイン アーキテクチャ

読み込みプロセス

ユーザーがアプリケーションを起動すると、次の処理が行われます。

  1. アプリケーションは、Visual Studio Tools for Office を使用して作成されたアドインを特定するレジストリ エントリをチェックします。

  2. 該当するレジストリ エントリが見つかると、アプリケーションは VSTOEE.dll を読み込み、VSTOEE.dll が AddinLoader.dll を読み込みます。これらは、Visual Studio 2005 Tools for Office Second Edition Runtime のローダー コンポーネントであるアンマネージ DLL です。詳細については、「Visual Studio Tools for Office Runtime の概要」を参照してください。

  3. AddinLoader.dll は .NET Framework を読み込み、Visual Studio Tools for Office ランタイムのマネージ部分を起動します。

  4. Visual Studio Tools for Office ランタイムが新しいアプリケーション ドメインを作成し、そのアプリケーション ドメインで My Computer Zone を信頼しないようにポリシーを設定し、コード アクセス セキュリティ ポリシー ストアをチェックしてアドイン アセンブリのポリシーを検出します。

  5. .NET Framework は、アセンブリから提示された証拠を、アプリケーション ドメインのポリシーと照合します。ポリシーに違反する場合はエラーが発生します。ポリシーに違反しない場合はプロセスが続行されます。

  6. アドインが配置マニフェストを使用する場合、Visual Studio Tools for Office ランタイムはその配置マニフェストを使用して、アセンブリの更新をチェックします。更新が必要な場合は、更新がすぐに実行されます。

  7. Visual Studio Tools for Office ランタイムがアドイン アセンブリを新しいアプリケーション ドメインに読み込みます。

  8. Visual Studio Tools for Office ランタイムがアドインの RequestComAddInAutomationService メソッドを呼び出します (このメソッドをオーバーライドしている場合)。

    このメソッドをオーバーライドして、アドイン内のオブジェクトを他の Microsoft Office ソリューションに公開することもできます。詳細については、「他の Office ソリューションからのアプリケーション レベルのアドインのコードの呼び出し」を参照してください。

  9. Visual Studio Tools for Office ランタイムがアドイン内の ThisAddIn_Startup メソッドを呼び出します。このメソッドは、Startup イベントの既定のイベント ハンドラです。詳細については、「Visual Studio Tools for Office プロジェクトのイベント」を参照してください。

Outlook 2003 アドインのシャットダウン動作

既存の Outlook 2003 COM アドイン (IDTExtensibility2 インターフェイスを直接実装するアドイン) を Visual Studio Tools for Office に移行する場合は、潜在的なシャットダウンの問題を回避するためのコードを削除してください。そうしないと、このコードが Visual Studio Tools for Office を使用して作成された Outlook 2003 アドインのシャットダウン プロセスと競合したり、アドインが途中でアンロードされたりする可能性があります。

Bb386298.alert_note(ja-jp,VS.90).gifメモ :

このセクションで解説されている動作は、Outlook 2007 アドインには当てはまりません。Outlook 2007 では、アドインが Outlook オブジェクトを参照している場合でも、常にアドインの OnDisconnection メソッドが呼び出されます。

シャットダウン上の問題の背景

COM アドインが参照している Outlook オブジェクトが 1 つ以上ある限り、Outlook 2003 はアドインの OnDisconnection メソッドを呼び出しません。アドインが OnDisconnection メソッドでのみクリーンアップされるオブジェクトを参照している場合でも、Outlook 2003 は OnDisconnection メソッドを呼び出しません。その結果、アドインはアンロードされず、Outlook 2003 はシャットダウンされません。

Visual Studio Tools for Office によるシャットダウン上の問題の解決方法

Visual Studio Tools for Office を使用して作成された Outlook 2003 アドインは、この潜在的な問題を回避する方法でアンロードされます。Visual Studio Tools for Office ランタイムでは、次のいずれかの操作が行われた場合に、アドインが Explorer オブジェクトへの参照も Inspector オブジェクトへの参照も所有していないと、アドインの Shutdown イベントが発生し、アドインのアプリケーション ドメインがアンロードされます。

  • Quit メソッドが呼び出された場合。

  • Explorer または InspectorClose イベントが発生した場合。

アプリケーション ドメインがアンロードされると、他の Outlook オブジェクトへの未解決のすべての参照がクリーンアップされ、Outlook 2003 はアドインをシャットダウンして終了できます。

参照

概念

ドキュメント レベルのカスタマイズのアーキテクチャ

Visual Studio Tools for Office Runtime の概要

アプリケーション レベルのアドインのプログラミング

Office ソリューションの開発

その他の技術情報

Visual Studio Tools for Office ソリューションのアーキテクチャ

Office ソリューションにおけるセキュリティ

Office ソリューションの配置