(57)【要約】  本発明は、ソフトウェア・アドイン・コンポーネントを発見し、資格認定し、および起動する方法、システム、およびコンピュータ・プログラム製品に関する。アドイン・コンポーネント・マネージャが、コンピュータ・システムにある１つまたは複数のアドイン・コンポーネントが、アプリケーションが要求する特定のタイプのアドイン・コンポーネントであることを発見する。アドイン・コンポーネント・マネージャは少なくとも１つの発見したアドイン・コンポーネントを、その少なくとも１つの発見したアドイン・コンポーネントが１つまたは複数の資格認定条件を満たすことに基づいて資格認定する。前述の１つまたは複数の資格認定条件は、アドイン・コンポーネントが、希望する形でアプリケーションと相互に動作するためにアドイン・コンポーネントに関連付けられるべき機能性を表す。アドイン・コンポーネント・マネージャは、アプリケーションで使用するための１つまたは複数の資格認定条件に従って、資格認定したアドイン・コンポーネントを起動する。
2009512063.tif 000002
【特許請求の範囲】
【請求項１】
アドイン・コンポーネント・マネージャを含むコンピュータ・システムで使用するための、アプリケーションに利用可能なアドイン・コンポーネントが前記アプリケーションでの使用に関して資格認定されるかどうかを決定する方法を実装するための、コンピュータ実行可能命令を格納した、１つまたは複数のコンピュータ読取可能記憶媒体を備えた、コンピュータ・プログラム製品であって前記コンピュータ実行可能命令は、プロセッサによって実行されると、前記コンピュータ・システムに、
アプリケーションに利用可能な候補アドイン・コンポーネントに対する１つまたは複数の識別したプロパティであって、前記の１つまたは複数の識別したプロパティは前記の候補アドイン・コンポーネントに関連付けた機能性を示し、前記アドイン・コンポーネントはアドイン・コンポーネント・インデックスのアドイン・コンポーネント・エントリにおいて示され、前記アドイン・コンポーネント・インデックスは、前記コンピュータ・システムの他のアドイン・コンポーネントに対するアドイン・コンポーネント・エントリも含む、前記プロパティにアクセスすること、
１つまたは複数の資格認定条件であって、アドイン・コンポーネントが前記アプリケーションと適切に動作するために前記アドイン・コンポーネントに関連付けられるべき機能性を表す、１つまたは複数の資格認定条件を満たすアドイン・コンポーネントへの要求を前記アプリケーションから受信すること、
前記の１つまたは複数の資格認定条件と前記の１つまたは複数の識別したプロパティとを比較すること、および
前記の１つまたは複数の資格認定条件と前記の１つまたは複数の識別したプロパティとの比較結果に基づいて、前記の候補アドイン・コンポーネントが前記アプリケーションでの使用に関して資格認定されるかどうかを決定する動作
を実施させることを特徴とするコンピュータ・プログラム製品。
【請求項２】
実行されると、前記の１つまたは複数の資格認定条件と前記の１つまたは複数の識別したプロパティとを比較する前に、前記コンピュータ・システムに、
前記の候補アドイン・コンポーネントに対する前記の１つまたは複数の識別したプロパティにアクセスする前に利用可能なアドイン・コンポーネントに対する要求であって、前記アプリケーションが要求している特定のタイプのアドイン・コンポーネントを示す選択可能なアドイン・コンポーネント・プロパティを含む、要求をアプリケーションから受信すること、
前記の選択可能なアドイン・コンポーネント・プロパティを、前記の候補アドイン・コンポーネントに対する前記のアドイン・コンポーネント・エントリのコンテンツと比較すること、
前記の比較結果に基づいて、前記の候補アドイン・コンポーネントは前記アプリケーションが要求する特定のタイプであることを発見すること、および
前記の候補アドイン・コンポーネントに対する前記の１つまたは複数の識別したプロパティにアクセスする前に、前記の候補アドイン・コンポーネントは前記特定のタイプのアドイン・コンポーネントであることを前記アプリケーションに対して示すこと
を実施させるコンピュータ実行可能命令をさらに備える請求項１に記載のコンピュータ・プログラム製品。
【請求項３】
１つまたは複数の資格認定条件を満たすアドイン・コンポーネントへの要求を前記アプリケーションから受信することを、実行されると前記コンピュータ・システムに行わせるコンピュータ実行可能命令は、特定のタイプのアドイン・コンポーネントへの要求を受信することを、実行されると前記コンピュータ・システムに行わせるコンピュータ実行可能命令を備えることを特徴とする請求項１に記載のコンピュータ・プログラム製品。
【請求項４】
前記の候補アドイン・コンポーネントが前記アプリケーションでの使用に関して資格認定されるかどうかを、実行されると前記コンピュータ・システムに決定させるコンピュータ実行可能命令は、前記の候補アドイン・コンポーネントが前記アプリケーションでの使用に関して資格認定されることを、実行されると前記コンピュータ・システムに決定させるコンピュータ実行可能命令を備えることを特徴とする請求項１に記載のコンピュータ・プログラム製品。
【請求項５】
前記の候補アドイン・コンポーネントが前記アプリケーションでの使用に関して資格認定されることを、実行されると前記コンピュータ・システムに決定させるコンピュータ実行可能命令は、前記の比較結果に基づいて前記の資格認定条件を満たす候補アドイン・コンポーネントのリストを、実行されると前記コンピュータ・システムに形成させるコンピュータ実行可能命令を備えることを特徴とする請求項４に記載のコンピュータ・プログラム製品
【請求項６】
前記の候補アドイン・コンポーネントが前記アプリケーションでの使用に関して資格認定されるかどうかを、実行されると前記コンピュータ・システムに決定させるコンピュータ実行可能命令は、前記の候補アドイン・コンポーネントが前記アプリケーションと互換性のあるエントリ・ポイント・プロトコルを有すると、実行されると前記コンピュータ・システムに決定させるコンピュータ実行可能命令を備えることを特徴とする請求項１に記載のコンピュータ・プログラム製品。
【請求項７】
前記の候補アドイン・コンポーネントが前記アプリケーションでの使用に関して資格認定されるかどうかを、実行されると前記コンピュータ・システムに決定させるコンピュータ実行可能命令は、前記アプリケーションと相互に動作するための適切なパーミッションを前記の候補アドイン・コンポーネントが有すると、実行されると前記コンピュータ・システムに決定させるコンピュータ実行可能命令を備えることを特徴とする請求項１に記載のコンピュータ・プログラム製品
【請求項８】
前記の候補アドイン・コンポーネントが前記アプリケーションでの使用に関して資格認定されるかどうかを、実行されると前記コンピュータ・システムに決定させるコンピュータ実行可能命令は、前記の候補アドイン・コンポーネントは前記アプリケーションが要求するアプリケーション・ドメインで実行できると、実行されると前記コンピュータ・システムに決定させるコンピュータ実行可能命令を備えることを特徴とする請求項１に記載のコンピュータ・プログラム製品。
【請求項９】
実行されると、前記コンピュータ・システムに対して、
前記アプリケーションで使用するために前記の候補アドイン・コンポーネントが起動されるべきであることを示すコンポーネント選択結果を前記アプリケーションから受信すること、および
前記アプリケーションで使用するための前記の候補アドインを前記の資格認定条件に従って起動すること
を実施させるコンピュータ実行可能命令をさらに備える請求項１に記載のコンピュータ・プログラム製品。
【請求項１０】
実行されると、前記コンピュータ・システムに対して、
前前記アプリケーションが前記アドイン・コンポーネントと適切に動作するために前記アプリケーションに関連付けられるべき機能性を表す１つまたは複数の他の資格認定条件を、記アプリケーションが満たすという要求を前記の候補アドインから受信すること、
前記の１つまたは複数の他の資格認定条件を前記のアプリケーションのプロパティと比較すること、および
前記の１つまたは複数の他の資格認定条件を前記のアプリケーションのプロパティと比較した結果に基づいて、前記の候補アドイン・コンポーネントでの使用に関して前記アプリケーションが資格認定されるかどうかを決定すること
を実施させるコンピュータ実行可能命令をさらに備える請求項１に記載のコンピュータ・プログラム製品。
【請求項１１】
実行されると、前記コンピュータ・システムに対して、
前記コンピュータ・システムで前記の候補アドイン・コンポーネントをインストールする間に、前記の候補アドイン・コンポーネントにアクセスすること、
前記の候補アドインを分析して、前記の候補アドイン・コンポーネントに含まれる前記機能性を決定すること、
前記の候補アドイン・コンポーネント用の、前記の候補アドイン・コンポーネントの前記機能性を示す前記の１つまたは複数の識別したプロパティを含む、前記アドイン・コンポーネント・エントリを生成すること、および
前記のアドイン・コンポーネント・エントリを前記のアドイン・コンポーネント・インデックスに格納すること
を実施させるコンピュータ実行可能命令をさらに備える請求項１に記載のコンピュータ製品。
【請求項１２】
実行されると、前記コンピュータ・システムに対して、
アドインの発見に用いるアドイン・コンポーネント・プロパティのサブセットに基づいて、前記コンポーネント・インデックスのアドイン・コンポーネント・エントリをソートすること
を実施させるコンピュータ実行可能命令をさらに備える請求項１に記載のコンピュータ・プログラム製品。
【請求項１３】
前記のアドイン・コンポーネント・インデックスを、システム・レジストリ、共有ＳＱＬサーバ、ＸＭＬファイル、アクティブ・ディレクトリ・サーバ、インターネットおよびファイル・システム・ディレクトリのうちから選択したデータ・リポジトリに格納することを特徴とする請求項１に記載のコンピュータ製品。
【請求項１４】
アドイン・コンポーネント・マネージャを含むコンピュータ・システムにおいて、アプリケーションに利用可能なアドイン・コンポーネントが前記アプリケーションでの使用に関して資格認定されるかどうかを決定する方法であって、前記方法は、
アプリケーションに利用可能な候補アドイン・コンポーネントに対する１つまたは複数の識別したプロパティであって、前記の候補アドイン・コンポーネントの前記機能性を示し、前記コンピュータ・システムの他のアドイン・コンポーネントに対するアドイン・コンポーネント・エントリも含むアドイン・コンポーネント・インデックス内のアドイン・コンポーネント・エントリからアクセスされる、一つまたは複数のプロパティにアクセスする動作、
アドイン・コンポーネントが前記アプリケーションと適切に動作するために前記のアドイン・コンポーネントに関連付けられるべきアドイン・コンポーネントの機能性を表す、１つまたは複数の資格認定条件を満たすアドイン・コンポーネントへの要求を前記アプリケーションから受信する動作、
前記の１つまたは複数の資格認定条件と前記の１つまたは複数の識別したプロパティとを比較する動作、および
前記の１つまたは複数の資格認定条件と前記の１つまたは複数の識別したプロパティとを比較した結果に基づいて、前記の候補アドイン・コンポーネントが前記アプリケーションでの使用に関して資格認定されるかどうかを決定する動作
を備えることを特徴とする方法。
【請求項１５】
１つまたは複数のアドイン・コンポーネント・エントリを含むアドイン・コンポーネント・マネージャと、コンピュータ・システムにおけるアドイン・コンポーネントの機能性を示す１つまたは複数のプロパティを含むアドイン・コンポーネント・インデックスとを含む、コンピュータ・システムで使用するためのコンピュータ・プログラム製品であって、要求されたアドイン・コンポーネントの機能性に基づいてアプリケーションで使用するアドイン・コンポーネントをロードする方法を実装するためのコンピュータ・プログラム製品であって、プロセッサによって実行されると、コンピュータ・システムに、
コンピュータ・システムにおける１つまたは複数のアドイン・コンポーネントが、アプリケーションが要求した特定のタイプのアドイン・コンポーネントであることを発見すること、
アドイン・コンポーネントが前記アプリケーションと希望する形で相互に動作するためにアドイン・コンポーネントに関連付けるべき機能性を表す１つまたは複数の許可条件を、その少なくとも１つの発見したアドイン・コンポーネントが満たすことに基づいて、少なくとも１つの発見したアドイン・コンポーネントを、資格認定すること、および
前記アプリケーションで使用するために、前記の１つまたは複数の資格認定条件に従って資格認定したアドイン・コンポーネントを起動すること
を実施させるコンピュータ実行可能命令が格納された１つまたは複数のコンピュータ読取可能記憶媒体を備えることを特徴とするコンピュータ・プログラム製品。
【請求項１６】
前記コンピュータ・システムにおける１つまたは複数のアドイン・コンポーネントが、前記アプリケーションが要求する特定のタイプのアドイン・コンポーネントであることを、実行されると前記コンピュータ・システムに発見させるコンピュータ実行可能命令は、前記アドイン・コンポーネント・インデックスに、アドイン・コンポーネントの特定のタイプを示す静的プロパティを有するアドイン・コンポーネント・エントリを問い合わせることを、実行されると前記コンピュータ・システムに行わせるコンピュータ実行可能命令を備えることを特徴とする請求項１５に記載のコンピュータ・プログラム製品。
【請求項１７】
少なくとも１つの発見したアドイン・コンポーネントを、その少なくとも１つの発見したアドイン・コンポーネントが１つまたは複数の資格認定条件を満たすことに基づいて資格認定することを、実行されると前記コンピュータ・システムに行わせるコンピュータ実行可能命令は、少なくとも１つの発見したアドイン・コンポーネントを、その少なくとも１つの発見したアドイン・コンポーネントが前記アプリケーションと互換性のあるエントリ・ポイント・プロトコルを有することに基づいて、資格認定することを、実行されると前記コンピュータ・システムに行わせるコンピュータ実行可能命令を備えることを特徴とする請求項１５に記載のコンピュータ・プログラム製品。
【請求項１８】
少なくとも１つの発見したアドイン・コンポーネントを、その少なくとも１つの発見したアドイン・コンポーネントが１つまたは複数の資格認定条件を満たすことに基づいて資格認定することを、実行されると前記コンピュータ・システムに行わせるコンピュータ実行可能命令は、少なくとも１つの発見したアドイン・コンポーネントを、その少なくとも１つの発見したアドイン・コンポーネントが前記アプリケーションと相互に動作するための適切なパーミッションを有することに基づいて、資格認定することを、実行されると前記コンピュータ・システムに行わせるコンピュータ実行可能命令を備えることを特徴とする請求項１５に記載のコンピュータ・プログラム製品。
【請求項１９】
少なくとも１つの発見したアドイン・コンポーネントを、その少なくとも１つの発見したアドイン・コンポーネントが１つまたは複数の資格認定条件を満たすことに基づいて資格認定することを、実行されると前記コンピュータ・システムに行わせるコンピュータ実行可能命令は、少なくとも１つの発見したアドイン・コンポーネントを、その少なくとも１つの発見したアドイン・コンポーネントが、前記アプリケーションが要求するアプリケーション・ドメイン内で実行できることに基づいて資格認定することを、実行されると前記コンピュータ・システムに行わせるコンピュータ実行可能命令を備えることを特徴とする請求項１５に記載のコンピュータ・プログラム製品。
【請求項２０】
前記アプリケーションで使用する前記の１つまたは複数の資格認定条件に従って資格認定したアドイン・コンポーネントを、実行されると前記コンピュータ・システムに起動させるコンピュータ実行可能命令は、前記アプリケーションと前記の資格認定したアドイン・コンポーネントとの間にパイプラインを、実行されると前記コンピュータ・システムに構築させるコンピュータ実行可能命令を備えることを特徴とする請求項１５に記載のコンピュータ・プログラム製品。
【発明の詳細な説明】
【背景技術】
【０００１】
コンピュータ・システムおよび関連技術は社会の多数の側面に影響を及ぼす。実際、コンピュータ・システムの情報を処理する能力は、我々の生活および仕事の仕方に変換されてきた。コンピュータ・システムは、今や、コンピュータが出現する以前は手操作で行っていた多数のタスク（例えば、ワード・プロセッシング、スケジューリング、およびデータベース管理）を普通に実施している。最近では、複数のコンピュータ・システムは互いに、および他の電子装置と接続され、コンピュータ・システムおよび他の電子装置が電子データを転送可能な有線および無線のコンピュータ・ネットワークの両方を形成している。結果として、コンピュータ・システムで実施される多数のタスク（例えば、音声通信、電子メールのアクセス、家電製品の制御、ウェブの閲覧、および文書の印刷）には、有線および／または無線のコンビュータ・ネットワークを通した、多数のコンピュータ・システムおよび／または他の電子装置との間の電子メッセージ交換が含まれる。
【０００２】
ソフトウェア・アプリケーション（例えば、ワード・プロセッサ、電子メール・クライアント、等）は、異なるアプリケーション・ソフトウェア・コンポーネントが相互に動作して所望の機能を与えるように、モジュール形式で設計されることがよくある。従って、アプリケーション・モジュールを、エンドユーザが実行時にアセンブルすることができ、異なるベンダが異なる時点に提供することがよくある。このモジュール性により、アプリケーションの機能（feature）を動的に変化させることができ、大規模アプリケーションの効率的な分散開発が推進される。
【０００３】
例えば、異なる複数の開発チームが、別々に、アプリケーションの様々なモジュールに従事し、それらのモジュールを後で結合することができる。開発期間中において、実行時に様々なモジュールが互いに相互に動作するよう設計することができる。ソフトウェア開発チームのメンバーが互いを認識することがよくあり、それらメンバー全てが（例えば、特定のアプリケーション開発に特に割り当てた）同一会社の従業員である場合がある。他方、個々の開発チームは、所与の複数のソフトウェア仕様を与えられ、或る複数のモジュールを提供することができる。ここで、前記の個々の開発チームは、互いを認識しない。
【０００４】
アプリケーション開発は、他の（および将来的に後に開発される）モジュール（例えば、アドイン）と相互に運用するためのインターフェースを開発することを含む可能性がある。そしてそのインターフェースは、アプリケーションに、元々は設計されていない追加の機能性および／または異なる機能性を与える。例えば、ウェブ・ブラウザは一般にプラグインをロードする機能性を含み、例えば、それがなければ処理できないフォーマット済みコンテンツ（例えば、フラッシュ・アニメーシヨン、ポータブル文書形式の文書）の正確な処理を容易にする。ターゲット・アプリケーションの開発者が開発することもできるが、プラグインおよびアドインはサード・パーティの開発者によって開発されることがよくある。すなわち、アドインの開発者は、そのアドインがアプリケーションと共に動作するよう設計したアプリケーションの開発者ではないことがよくある。
【発明の開示】
【発明が解決しようとする課題】
【０００５】
結果として、アプリケーションおよび対応するアドインは異なる時点でコンピュータ・システムにインストール（または格納）されることがよくある。アドインをロードするため、アプリケーションはアドイン名でアプリケーション・インターフェースを呼び出す。しかしながら、アプリケーションがアドインをロードするためには、アプリケーションは一般に、アドインの（例えば、ファイル・システム内の）位置（location）および名前を知らなければならない。従って、アドイン・ディレクトリのパスは一般にアプリケーション内にハード・コーディングされる。アプリケーションがアドインを利用するためには、アドインを適切なアドイン・ディレクトリに格納しなければならない。
【０００６】
それぞれのアプリケーションは、個々のアドイン・ディレクトリにハード・コーディングしたパスを有することができるので、一つのコンピュータ・システムには多数のアドイン・ディレクトリが存在する可能性がある。幾つかのアドインは、多数の異なるアプリケーション（例えば、ワード・プロセッサ、電子メール・クライアント、スプレッドシート・アプリケーション、等）に対して同様な機能性（例えば、ディクショナリ）を与えるよう設計されている可能性がある。しかしながら、多数の異なるアプリケーションに同様な機能を与えるため、アドインのそれぞれのコピーを、それぞれのアプリケーション用のアドイン・ロケーションに格納しなければならない。結果として、アドインは、一つのコンピュータ・システムの多数の位置に冗長に格納される可能性がある。幾つかの環境では、所望の機能性を有するアドインをコンピュータ・システムに格納することができるが、アドインが別のアプリケーションのアドイン・ディレクトリに格納されるので、そのアドインは、あるアプリケーションに対して未知であり、および／またはアクセス不能である。
【０００７】
アドインの開発には一般に、アドインをロードするためにアプリケーションが使用するインターフェースを、アドイン開発者が知ることが必要である。従って、アドイン開発者が同様なアドインの機能性を多数の異なるアプリケーションに与えたい場合、アドイン開発者は、前述の異なるアプリケーションの各々に対して適切なインターフェースでアドインを開発しなければならない。さらに、アプリケーションの更新がアプリケーション・インターフェースを変更する場合、互換性のためにアドインも更新する必要がある可能性がある。従って、アドイン開発者は互換性のために、アドインに含まれる新規の機能性がないときでも、アドインの新規バージョンを頻繁にリリースする必要がありうる。
【０００８】
前述のように、アドインの機能性へのアクセスには、一般に、アプリケーション固有のアドイン・ディレクトリから名前でアドインをロードすることが含まれる。しかしながら、アドインのロード前に、アプリケーションは、アドインが意図した通り動作することおよびアドインが安全であることをほとんど保証できない。一般に、アドインの動作の仕方を決定するために使用できる唯一の仕組みは、アドインをロードして実行時にアドインをテストすることである。従って、アプリケーションは、アドインが不適切に構成されていることを決定するために、不適切に構成されたアドインを強制的にロードおよび実行することを余儀なくされる場合がある。不適切に構成されたアドインをアプリケーションが使用することは、コンピュータ・システムを誤動作させる可能性がある。
【０００９】
アドインの使用はセキュリティ・リスクももたらす。その理由は、アドイン内の悪意のあるコードが、アプリケーションと相互作用することにより、保護されたシステム機能へのアクセスを取得しうる可能性があるからである。しかしながら、アプリケーションは、アドインをロードおよび実行せずに、アドインに悪意のあるコードが含まれることを決定することに対して、あったとしても限定的な仕組みしか有さない。１つの解決法は、アプリケーションがアドインを利用することを防止することである。しかしながらこの解決法では、アプリケーションの機能性を高める適切に構成したアドインをアプリケーションが利用することを妨げる。
【課題を解決するための手段】
【００１０】
本発明は、ソフトウェア・アドイン・コンポーネントを発見する、資格認定する（qualifying）、および起動する方法、システム、およびコンピュータ・プログラム製品に関する。幾つかの実施形態では、コンピュータ・システムは、アドインがアプリケーションに利用可能であることを発見する。アドイン・コンポーネント・マネージャが、利用可能なアドイン・コンポーネントへの要求をアプリケーションから受信する。前述の要求には、アプリケーションが要求している特定のタイプのアドイン・コンポーネントを示す、選択可能なアドイン・コンポーネント・プロパティが含まれる。
【００１１】
アドイン・コンポーネント・マネージャは選択可能なアドイン・コンポーネント・プロパティを、アドイン・コンポーネントに対するアドイン・コンポーネント・エントリのコンテンツと比較する。アドイン・コンポーネント・エントリは、コンピュータ・システムの他のアドイン・コンポーネントに対するアドイン・コンポーネント・エントリも含むアドイン・コンポーネント・インデックスに含まれる。アドイン・コンポーネント・エントリには、アドイン・コンポーネント・マネージャでの登録処理中に識別したアドイン・コンポーネントの機能性を示す１つまたは複数のプロパティが含まれる。アドイン・コンポーネント・マネージャは前述の比較結果に基づいて、アドイン・コンポーネントが、アプリケーションが要求する特定のタイプであることを決定する。アドイン・コンポーネント・マネージャはアプリケーションに対し、アドイン・コンポーネントが、アプリケーションに利用可能な特定のタイプのアドイン・コンポーネントであることを示す。
【００１２】
他の実施形態では、コンピュータ・システムは、アプリケーションに利用可能なアドイン・コンポーネントが、アプリケーションでの使用に関して資格認定されるかどうかを決定する。アドイン・コンポーネント・マネージャは、アプリケーションに利用可能な候補アドイン・コンポーネントに対する１つまたは複数の識別したプロパティにアクセスする。前述の１つまたは複数の識別したプロパティは、前述の候補アドイン・コンポーネントに関連付けられた機能性を示す。アドイン・コンポーネントは、アドイン・コンポーネント・インデックス内のアドイン・コンポーネント・エントリにおいて示される。アドイン・コンポーネント・インデックスは、コンピュータ・システムの他のアドイン・コンポーネントに対するアドイン・コンポーネント・エントリも含む。
【００１３】
コンポーネント・マネージャは、１つまたは複数の資格認定条件（qualification constraints）を満たすアドイン・コンポーネントへの要求をアプリケーションから受信する。それぞれの資格認定条件は、アドイン・コンポーネントがアプリケーションと適切に動作するためにアドイン・コンポーネントに関連付けられるべき機能性を表す。コンポーネント・マネージャは１つまたは複数の資格認定条件と１つまたは複数の識別したプロパティとを比較する。コンポーネント・マネージャは、前述の１つまたは複数の資格認定条件と前述の１つまたは複数の識別したプロパティとの比較結果に基づいて、コンポーネント内の候補アドインがアプリケーションでの使用に関して資格認定されるかどうかを決定する。
【００１４】
更なる実施形態では、要求されたアドイン・コンポーネントの機能性に基づいて、コンピュータ・システムはアプリケーションで使用するアドイン・コンポーネントをロードする。アドイン・コンポーネント・マネージャは、コンピュータ・システムにある１つまたは複数のアドイン・コンポーネントが、アプリケーションが要求した特定のタイプのアドイン・コンポーネントであることを発見する。アドイン・コンポーネント・マネージャは少なくとも１つの発見したアドイン・コンポーネントを、その少なくとも１つの発見したアドイン・コンポーネントが１つまたは複数の資格認定条件を満たすことに基づいて、資格認定する。前述の１つまたは複数の資格認定条件は、希望する形でアドイン・コンポーネントがアプリケーションと相互に動作するためにアドイン・コンポーネントに関連付けられるべき機能性を表す。アドイン・コンポーネント・マネージャは、アプリケーションで使用するための１つまたは複数の資格認定条件に従って、資格認定されたアドイン・コンポーネントを起動する。
【００１５】
本要約は、選択した概念を簡潔な形で紹介するために提供される。これらの概念は以下の「発明を実施するための最良の形態」でさらに説明される。本要約は、請求の範囲の主題についての主要な特徴または本質的な特徴を特定するようには意図しておらず、請求の範囲の主題についての範囲を決定する手がかりとして使用されることを意図していない。
【００１６】
本発明の更なる特徴および利点は、以下の記述で説明され、それらは、以下の記述から部分的に明らかになり、あるいは、本発明を実践することで習得することができる。本発明の特徴および利点は、請求の範囲で特に指摘した手段（instruments）および組合せにより実現され、獲得することができる。本発明のこれらおよび他の特徴は、以下の説明および求の範囲からより完全に明らかになり、以降で説明する本発明の実践により習得することができる。
【００１７】
本発明の上述した利点および他の利点および特徴を獲得することが可能な方法を説明するため、上で簡単に説明した本発明のより詳細な説明が、付属図面において示すその具体的な実施形態を参照して、提供される。これらの図面は、本発明の本発明の一般的な実施形態を示すに過ぎず、従って本発明の範囲を限定すると見なされるべきではないことを理解して、付属図面の使用を通して、本発明が、を更なる具体性および詳細を以て記述され、説明される。
【発明を実施するための最良の形態】
【００１８】
本発明は、ソフトウェア・アドイン・コンポーネントを発見する、資格認定する、および起動する方法、システム、およびコンピュータ・プログラム製品に関する。幾つかの実施形態では、コンピュータ・システムは、アドインがアプリケーションに利用可能であることを発見する。アドイン・コンポーネント・マネージャが、利用可能なアドイン・コンポーネントへの要求をアプリケーションから受信する。その要求には、アプリケーションが要求している特定のタイプのアドイン・コンポーネントを示す、選択可能なアドイン・コンポーネント・プロパティが含まれる。
【００１９】
アドイン・コンポーネント・マネージャは選択可能なアドイン・コンポーネント・プロパティを、アドイン・コンポーネントに対するアドイン・コンポーネント・エントリのコンテンツと比較する。アドイン・コンポーネント・エントリは、コンピュータ・システムの他のアドイン・コンポーネントに対するアドイン・コンポーネント・エントリも含むアドイン・コンポーネント・インデックスに含まれる。アドイン・コンポーネント・エントリには、アドイン・コンポーネント・マネージャでの登録処理中に識別したアドイン・コンポーネントの機能性を示す１つまたは複数のプロパティが含まれる。アドイン・コンポーネント・マネージャは前述の比較結果に基づいて、アドイン・コンポーネントが、アプリケーションが要求する特定のタイプであることを決定する。アドイン・コンポーネント・マネージャは、アプリケーションに対し、アドイン・コンポーネントが、アプリケーションに利用可能な特定のタイプのアドイン・コンポーネントであることを示す。
【００２０】
他の実施形態では、コンピュータ・システムは、アプリケーションに利用可能なアドイン・コンポーネントがアプリケーションでの使用に関して資格認定されるかどうかを決定する。アドイン・コンポーネント・マネージャは、アプリケーションに利用可能な候補アドイン・コンポーネントに対する１つまたは複数の識別したプロパティにアクセスする。前述の１つまたは複数の識別したプロパティは、前記の候補アドイン・コンポーネントに関連付けられた機能性を示す。アドイン・コンポーネントは、アドイン・コンポーネント・インデックス内のアドイン・コンポーネント・エントリにおいて示される。そのアドイン・コンポーネント・インデックスは、コンピュータ・システムの他のアドイン・コンポーネントに対するアドイン・コンポーネント・エントリも含む。
【００２１】
コンポーネント・マネージャは、１つまたは複数の資格認定条件を満たすアドイン・コンポーネントへの要求をアプリケーションから受信する。それぞれの資格認定条件は、アドイン・コンポーネントがアプリケーションと適切に動作するためにアドイン・コンポーネントに関連付けられるべき機能性を表す。コンポーネント・マネージャは前述の１つまたは複数の資格認定条件と前述の１つまたは複数の識別したプロパティを比較する。コンポーネント・マネージャは、前述の１つまたは複数の資格認定条件と前述の１つまたは複数の識別したプロパティとの比較結果に基づいて、候補アドイン・コンポーネントがアプリケーションでの使用に関して資格認定されるかどうかを決定する。
【００２２】
更なる実施形態では、要求されたアドイン・コンポーネントの機能性に基づいて、コンピュータ・システムはアプリケーションで使用するアドイン・コンポーネントをロードする。アドイン・コンポーネント・マネージャは、コンピュータ・システムにある１つまたは複数のコンポーネントが、アプリケーションが要求した特定のタイプのアドイン・コンポーネントであることを発見する。アドイン・コンポーネント・マネージャは少なくとも１つの発見したアドイン・コンポーネントを、その少なくとも１つの発見したアドイン・コンポーネントが１つまたは複数の資格認定条件を満たすことに基づいて資格認定する。前述の１つまたは複数の資格認定条件は、希望する形でアドイン・コンポーネントがアプリケーションと相互に動作するためにアドイン・コンポーネントに関連付けられるべき機能性を表す。アドイン・コンポーネント・マネージャは、アプリケーションで使用する１つまたは複数の資格認定条件に従って、資格認定されたアドイン・コンポーネントを起動する。
【００２３】
本発明の実施形態は、以下でさらに詳細に議論するように、コンピュータハードウェアを含む特殊目的または汎用のコンピュータを備えることができる。本発明の範囲内にある実施形態には、自身の上に記憶したコンピュータ実行可能命令またはデータ構造を運搬または有するコンピュータ読取可能媒体も含まれる。上記のコンピュータ読取可能媒体は、汎用目的または特殊目的のコンピュータによりアクセス可能な任意の利用可能な媒体であることができる。限定ではなく例として、コンピュータ読取可能媒体はコンピュータ読取可能記憶媒体を備えることができる。そのコンピュータ読取可能記憶媒体には、例えば、ＲＡＭ、ＲＯＭ、ＥＥＰＲＯＭ、ＣＤ−ＲＯＭまたは他の光ディスク記憶、磁気ディスク記憶または他の磁気記憶装置、あるいは任意の他の媒体がある。前述の任意の他の媒体を使用して、コンピュータ実行可能命令またはデータ構造の形で所望のプログラムコード手段を記憶することができ、汎用目的または特殊目的のコンピュータにより前述の任意の他の媒体にアクセスすることができる。
【００２４】
本説明および添付請求項では、“ネットワーク”を、コンピュータ・システムおよび／またはモジュール間の電子データを送信可能な１つまたは複数のデータリンクとして定義する。情報をネットワークまたは別の通信接続（ハード・ワイヤード、ワイヤレス、あるいはハード・ワイヤードまたはワイヤレスの組み合わせのいずれか）上でコンピュータに転送または提供するとき、コンピュータは正しくその通信をコンピュータ読取可能媒体と捉える。従って、限定ではなく例として、コンピュータ読取可能媒体はネットワークまたはデータリンクを備えることができる。前述のネットワークまたはデータリンクを使用して、所望のプログラムコード手段を、汎用目的または特殊目的のコンピュータによりアクセス可能なコンピュータ実行可能命令またはデータ構造の形で搬送または記憶することができる。
【００２５】
コンピュータ実行可能命令は例えば、汎用コンピュータ、特殊目的コンピュータ、または特殊目的処理装置に或る特定の機能または機能グループを実施させる命令およびデータを備える。コンピュータ実行可能命令は例えば、バイナリ、アセンブリ言語のような中間形式の命令であることができ、ソースコードであってもよい。発明の主題を構造的な特徴および／または方法論的動作に固有な言葉で説明するが、添付請求項で定義する発明の主題は上述した特徴または動作に必ずしも限定されないことは理解されるべきである。むしろ、説明した特徴および動作は、請求項を実装する例示的な形態として開示してある。
【００２６】
当業界の技術者は、多種のコンピュータ・システム構成を有するネットワーク・コンピューティング環境で本発明を実践できることを理解するであろう。前述のコンピュータ・システム構成には、パーソナル・コンピュータ、ラップトップ・コンピュータ、ハンドヘルド装置、マルチプロセッサ・システム、マイクロ・プロセッサ・ベースまたはプログラム可能民生用電子機器、ネットワークＰＣ、ミニ・コンピュータ、メインフレーム・コンピュータ、携帯電話、ＰＤＡ、ページャ、等が含まれる。本発明を分散システム環境で実践することもできる。この分散システム環境では、（ハード・ワイヤード・データリンク、ワイヤレス・データリンクによって、またはハード・ワイヤードおよびワイヤレス・データリンクの組み合わせによってのいずれかにより）ネットワークを通して接続したローカルおよびリモート・コンピュータ・システムの両方がタスクを実施する。分散システム環境では、プログラム・モジュールをローカルおよびリモート・メモリ記憶装置の両方に配置することができる。
【００２７】
図１は、ソフトウェア・アドイン・コンポーネントの発見する、資格認定する、および起動を促進するコンピュータ・アーキテクチャ１００の例を示す。コンピュータ・アーキテクチャ１００内にコンピュータ・システムのコンポーネントを示してある。コンピュータ・システムを、例えばローカル・エリア・ネットワーク（“ＬＡＮ”）、広域ネットワーク（“ＷＡＮ”）、またはインターネットのようなネットワークに接続することができる。従って、コンピュータ・システムおよび他のネットワーク接続コンピュータ・システムは、ネットワークに接続した他のコンピュータ・システムに対してデータを送受信することができる。従って、コンピュータ、および他の接続されたコンピュータ・システム（示さず）は、メッセージ関連データを生成し、メッセージ関連データ（例えば、インターネット・プロトコル（“ＩＰ”）データグラムおよび、送信制御プロトコル（“ＴＣＰ”）、ハイパー・テキスト転送プロトコル（“ＨＴＴＰ”）、シンプル・メール転送プロトコル（“ＳＭＴＰ”）、等のようなＩＰデータグラムを利用する他の上位層プロトコル）をネットワーク上で交換することができる。
【００２８】
コンピュータ・システム・アーキテクチャ１００にはアプリケーション１０１、コンポーネント・マネージャ１０２、および記憶装置１０３が含まれる。コンピュータ・アーキテクチャ１００内部では、システム・メモリ内に存在する（またはシステム・メモリと相互作用する）項目を実線で囲ってある。例えば、アプリケーション１０１およびコンポーネント・マネージャ１０２はシステム・メモリ内にロードされる。他方、記憶装置１０３内に存在する項目を点線で囲ってある。例えば、コンポーネント１２１、１２２、および１２３ならびにコンポーネント・インデックス１０４のコンポーネント・エントリは記憶装置１０３内に存在する。異なる時点で、同じ項目がシステム・メモリおよび／または記憶装置１０３内に存在することができる。例えば、コンポーネント１２２を起動して、コンポーネント１２２の一部を記憶装置１０３からシステム・メモリにロードすることができる（が、なお記憶装置１０３内にも存在する）。
【００２９】
一般に、アプリケーション１０１は、ソフトウェア・アドイン・コンポーネントを利用して機能性を高めるよう構成したアプリケーショである。例えば、アプリケーション１０１は外部ディクショナリをロード可能なワード・プロセッサ・アプリケーション、または特定のタイプのコンテンツに対してプラグインをロード可能なウェブ・ブラウザであることができる。アプリケーション１０１は、ソフトウェア・アドイン・コンポーネントと相互に動作するためのプログラム・インターフェースを有することができる。アプリケーション１０１は、アプリケーション１０１のユーザがソフトウェア・アドイン・コンポーネントのタイプおよび、アプリケーション１０１と相互に動作するためにソフトウェア・アドイン・コンポーネントが従うべき条件（constraint）を指定できるユーザ・インターフェースを含むこともできる。
【００３０】
コンポーネント・マネージャ１０２は一般に、利用可能なソフトウェア・アドイン・コンポーネントをアプリケーションに与えるように構成する。コンポーネント・マネージャ１０２をオペレーティング・システム内に含めることができ、および／またはコンポーネント・マネージャ１０２はアプリケーションに関するソフトウェア・アドイン・コンポーネントを管理するミドルウェアの一部であることができる。コンポーネント・マネージャ１０２には、ソフトウェア・アドイン・コンポーネントに対するアプリケーションの要求を受信し、その要求を満たすソフトウェア・アドイン・コンポーネントを識別し、識別したソフトウェア・アドイン・コンポーネントをアプリケーションに返す機能性が含まれる。
【００３１】
また、登録処理の一部として、ソフトウェア・アドイン・コンポーネントをコンピュータ・アーキテクチャ１００にインストールするとき、コンポーネント・マネージャ１０２は前述のソフトウェア・アドイン・コンポーネントにアクセスすることができる。例えば、コンポーネント・マネージャ１０２はコンポーネント１２２にアクセスすることができる。コンポーネント・マネージャ１０２はアクセスしたソフトウェア・アドイン・コンポーネントを（例えば、インストール情報に基づいて）分析して、例えばファイル・パスまたはファイル名のような、コンポーネント１２２を記憶装置１０３に記憶すべき位置を識別することができる。
【００３２】
コンポーネント・マネージャ１０２は、アクセスしたソフトウェア・アドイン・コンポーネントを分析して、ソフトウェア・アドイン・コンポーネントのタイプとソフトウェア・アドイン・コンポーネントの動作能力（operational capabilities）とを（例えば、リフレクションを通して）識別することもできる。例えば、コンポーネント・マネージャ１０２はコンポーネント１２２上で属性を分析して、コンポーネント１２２のタイプと動作能力とを識別することができる。ソフトウェア・アドイン・コンポーネントのタイプは例えば、ディクショナリ、コンテンツ・プロセッサ、等を含むことができる。ソフトウェア・アドイン・コンポーネントの動作能力は、ソフトウェア・アドイン・コンポーネントに対するエントリ・ポイント、ソフトウェア・アドイン・コンポーネントが必要またはサポートする分離境界、およびソフトウェア・アドイン・コンポーネントに関連付けたセキュリティ設定を含むことができる。
【００３３】
コンポーネント・マネージャ１０２は、ソフトウェア・アドイン・コンポーネントの識別した機能性（例えば、タイプおよび動作能力）を示す１つまたは複数のプロパティを含むコンポーネント・エントリを構築することができる。例えば、コンポーネント・マネージャ１０２は、少なくともプロパティ１４１および１５１を含むコンポーネント１２２に対するコンポーネント・エントリ１３１を構築することができる。コンポーネント・エントリ内のプロパティは、例えばディクショナリ、コンテンツ・プロセッサ、等のようなソフトウェア・アドイン・コンポーネントのタイプを示すことができる。コンポーネント・エントリ内のプロパティは、ソフトウェア・アドイン・コンポーネントを記憶する（例えば、ファイル・システム内の）位置（location）を示すこともできる。
【００３４】
コンポーネント・エントリ内のプロパティは、ソフトウェア・アドイン・コンポーネントに対するインターフェースの実装に使用されるコントラクト（contract）（またはエントリ・ポイント・プロトコル）を示すこともできる。エントリ・ポイントを表すプロパティを拡張可能マークアップ言語（“ＸＭＬ”）マニフェストに含めることができる。拡張可能マークアップ言語（“ＸＭＬ”）マニフェストは、特定のマニフェスト・スキーマに従い、ソフトウェア・アドイン・コンポーネントに含まれる１つまたは複数のアセンブリを定義する。コンポーネント・マネージャ１０２はソフトウェア・アドイン・コンポーネントを分析してエントリ・ポイントを識別し、これをコンポーネント・エントリ内のプロパティで表すことができる。エントリ・ポイントはアセンブリ内のインスタンス化可能なクラスであることができる。クラスは、ソフトウェア・アドイン・コンポーネントを初期フックアップおよび制御するための、ホスト・アプリケーションが用いる標準プロトコルを実装することができる。以下のコード例はエントリ・ポイント・プロトコルを表す。  
Public interface IEntryPoint Protocol: IProtocol  
{  
void Startup(IProtocol hostObject);  
void Shutdown();  
}
【００３５】
プロパティは、ソフトウェア・アドイン・コンポーネントを実行する位置（または分離境界）を示すこともできる。位置は、ソフトウェア・アドイン・コンポーネントが要求しているアプリケーションとのインプロセスまたはアウトプロセスでの実行に適合するかどうか、または要求しているアプリケーションと同一または別のアプリケーション・ドメインにあるかどうかを示すことができる。サポートされる分離境界または必要な分離境界は、ローカル・アプリケーション・ドメイン、共有アプリケーション・ドメイン、プライベート・アプリケーション・ドメイン、および他のプロセスを含むことができる。
【００３６】
プロパティはソフトウェア・アドイン・コンポーネントと関連付けたセキュリティ設定を示すこともできる。例えば、プロパティはソフトウェア・アドイン・コンポーネントを実行するための一連のパーミッション（permissions）を示すことができる。
【００３７】
コンポーネント・マネージャ１０２は、ソフトウェア・アドイン・コンポーネントに対して構築したコンポーネント・エントリをコンポーネント・インデックス１０４に格納することができる。コンポーネント・インデックス１０４は、例えばシステム・レジストリ、共有ＳＱＬサーバ、ＸＭＬファイル、アクティブ・ディレクトリ・サーバ、インターネット、またはファイル・システム・ディレクトリのような、事実上任意のデータ・リポジトリであることができる。
【００３８】
コンポーネント・マネージャ１０２のソフトウェア・アドイン・コンポーネントの分析に続いて、またはそれと並行して、ソフトウェア・アドイン・コンポーネントを記憶装置１０３に格納することができる。例えば、コンポーネント１２２をコンポーネント１２１および１２３（および垂直な楕円で表した他のソフトウェア・アドイン・コンポーネント）とともに記憶装置１０３に格納することができる。従って、記憶装置１０３内のそれぞれのソフトウェア・アドイン・コンポーネントは、コンポーネント・インデックス１０４内に（機能性を示す１つまたは複数のプロパティを有する）対応するコンポーネント・エントリを有することができる。例えば、コンポーネント・エントリ１３１は、コンポーネント１２２に対応することができ、コンポーネント・エントリ１３２はコンポーネント１２１に対応することができる、等である。
【００３９】
コンポーネント・マネージャ１０２は、コンポーネント・インデックス１０４を、例えばアドインの開発者、アプリケーションの開発者、等のコンポーネント・マネージャ１０２に既知の基準でソートすることができる。インデックスをソートすることで、例えば探索中に、これらの基準を用いて抽出（検索）することがより効率的になる。
【００４０】
前述のように、コンポーネント・エントリ内のプロパティは、対応するソフトウェア・アドイン・コンポーネントの機能性を示す。従って、プロパティ１４１および１５１はコンポーネント１２２の機能性を示すことができ、プロパティ１４２および１５２はコンポーネント１２１の機能性を示すことができる。記憶装置１０３にあるコンポーネント１２３および他のコンポーネントは、１つまたは複数の指示プロパティを収容するコンポーネント・インデックス１０４内に対応コンポーネント・エントリを有することもできる。コンポーネント・エントリ１３１および１３２はそれぞれ２つのプロパティを示すが、対応するソフトウェア・アドイン・コンポーネントについてのコンポーネント・マネージャ１０２の分析に少なくとも部分的に基づいて、事実上任意数のプロパティをコンポーネント・エントリ内に含めることができる。
【００４１】
図２は、アプリケーションに利用可能なアドイン・コンポーネントを発見する方法２００のフローチャートを示す。方法２００を、コンピュータ・システム・アーキテクチャ１００内のコンポーネントおよびデータに関して説明する。
【００４２】
方法２００には、利用可能なアドイン・コンポーネントに対する要求をアプリケーションから受信する動作（動作２０１）が含まれる。その要求には、アプリケーションが要求している特定のタイプのアドイン・コンポーネントを示す、選択可能なアドイン・コンポーネント・プロパティが含まれる。例えば、コンポーネント・マネージャ１０２は、プロパティ１１２を含む要求１１１をアプリケーション１０１から受信することができる。プロパティ１１２は、アプリケーション１０１が要求している特定のタイプのソフトウェア・アドイン・コンポーネントを示すことができる。幾つかの実施形態では、プロパティ１１２は、アプリケーション１０１内に予め構成されている。他の代替実施形態では、アプリケーション１０１は、ユーザが選択したプロパティ１１２（または幾つかの他の選択可能なプロパティ）を受信する。
【００４３】
方法２００には、選択可能なアドイン・コンポーネント・プロパティと、アドイン・コンポーネントに対するアドイン・コンポーネント・エントリのコンテンツとを比較する動作（動作２０２）が含まれる。アドイン・コンポーネント・エントリは、コンピュータ・システムの他のアドイン・コンポーネントに対するアドイン・コンポーネント・エントリも含むアドイン・コンポーネント・インデックスに含まれる。アドイン・コンポーネント・エントリには、アドイン・コンポーネント・マネージャでの登録処理中に識別したアドイン・コンポーネントの機能性を示す１つまたは複数のプロパティが含まれる。例えば、コンポーネント・マネージャ１０２は、問い合わせ１１３を、コンポーネント・インデックス１０４内のコンポーネント・エントリに対して発行することができる。従って、プロパティ１１２が、コンポーネント・エントリ１３１内の（コンポーネント１２２の機能性を示す）プロパティ１４１および１５１に対して比較されることが可能である。
【００４４】
方法２００には、アドイン・コンポーネントが、アプリケーションが要求する特定のタイプであることを比較結果に基づいて決定する動作が含まれる（動作２０３）。例えば、コンポーネント・マネージャ１０２は、プロパティ１１２をプロパティ１４１（またはコンポーネント・エントリ１３１内の幾つかの他のプロパティ）と比較した結果に基づいて、コンポーネント１２２が、アプリケーション１０１が要求したタイプのソフトウェア・アドイン・コンポーネントであることを決定することができる。コンポーネント・マネージャ１０２が、１つまたは複数の他のコンポーネントも特定のタイプのコンポーネントであることも決定することが可能である。コンポーネント・マネージャ１０２は、例えばコンポーネント・リスト１１４のような、特定のタイプの任意のコンポーネントを識別するリストを編集することができる。コンポーネント・リスト１１４は、（タイプに加えて）、例えばソフトウェア・アドイン・コンポーネントの動作能力を示すプロパティのような、コンポーネント・エントリからの他のプロパティを含むこともできる。
【００４５】
方法２００には、アドイン・コンポーネントが、アプリケーションに利用可能な特定のタイプのアドイン・コンポーネントであることをアプリケーションに対して示す動作（動作２０４）が含まれる。例えば、コンポーネント・マネージャ１０２はアプリケーション１０１に対して、コンポーネント１２２が、プロパティ１１２が示すタイプのコンポーネントであることを示すことができる。特定のタイプのコンポーネントのリスト、例えばコンポーネント・リスト１１４を編集すると、コンポーネント・マネージャは少なくともリストの一部をアプリケーション１０１に送信することができる。例えば、コンポーネント・マネージャ１０２は、部分リスト１１４Ｐをアプリケーション１０１に送信することができる。
【００４６】
部分リスト１１４Ｐは、特定のタイプの各ソフトウェア・アドイン・コンポーネントを識別するプロパティを含むことができる。コンポーネント・マネージャ１０２は、ソフトウェア・アドイン・コンポーネントの動作能力を示す他のプロパティを、それらをアプリケーション１０１に送信せずに、維持することができる。または、コンポーネント・マネージャ１０２は、ソフトウェア・アドイン・コンポーネントの動作能力を示すプロパティをアプリケーション１０１に送信することができる。従って、アプリケーション１０１に、要求した特定のタイプの任意の利用可能なソフトウェア・アドイン・コンポーネント（および、潜在的に、ソフトウェア・アドイン・コンポーネントの他の機能性）を認識させることができる。
【００４７】
方法２００を、アドイン・コンポーネント・インデックス内のそれぞれのエントリ（例えば、コンポーネント・インデックス１０４内のそれぞれのエントリ）に対して繰り返し、特定のタイプの他のアドイン（例えば、コンポーネント１２１および１２３）を潜在的に識別することができる。従って、特定のタイプの多数のアドイン（例えば、登録されたアドイン全体のサブセット）を発見することができる。従って、アドインの登録時に、アドイン・マネージャ（例えば、コンポーネント・マネージャ１０２）に与えた情報に基づいてアドイン・コンポーネントを識別（発見）することができる。方法２００を使用して、アプリケーションを使用して特定の機能性を潜在的に実装可能なアドイン・コンポーネントを粗く選択することができる。
【００４８】
図３は、アプリケーションに利用可能なアドイン・コンポーネントがアプリケーションでの使用に関して資格認定されるかどうかを決定する方法３００のフローチャートを示す。方法３００を、コンピュータ・システム・アーキテクチャ１００内のコンポーネントおよびデータに関して説明する。
【００４９】
方法３００には、アプリケーションに利用可能な候補アドイン・コンポーネントに対する１つまたは複数の識別したプロパティへアクセスする動作（動作３０１）が含まれる。前述の１つまたは複数の識別したプロパティは、候補アドイン・コンポーネントに関連付けた機能性を示す。アドイン・コンポーネントは、アドイン・コンポーネント・インデックス内のアドイン・コンポーネント・エントリにおいて示される。前述のアドイン・コンポーネント・インデックスは、コンピュータ・システムの他のアドイン・コンポーネントに対するアドイン・コンポーネント・エントリも含む。例えば、コンポーネント・マネージャ１０２は、コンポーネント・エントリ１３１から（コンポーネント１２２の機能性を示す）プロパティ１４１および１５１にアクセスすることができる。または、コンポーネント・マネージャ１０２は、特定のタイプのソフトウェア・アドイン・コンポーネントの発見に応じて予め編集したコンポーネント・リスト１１４から、プロパティ１４１および１５１にアクセスすることができる。
【００５０】
他の実施形態では、コンポーネント・マネージャ１０２は、コンポーネント・エントリ・インデックス１０４に格納されないコンポーネント１２２に関連付けた他の情報にアクセスする。コンポーネント・インデックス１０４に含まれる情報と独立して、および／または一緒に他の関連情報にアクセスすることができる。他の関連情報は、コンポーネント１２２に対してアクセス可能または利用可能であったり、そうでなかったり、登録処理中にコンポーネント・マネージャ１０２に与えられたり、与えられなかったりする。さらに、コンポーネント・マネージャ１０２は、登録処理中にコンポーネントから受信した情報を廃棄または無視することを選択することができる。従って、コンポーネント１２２が関連情報をコンポーネント・マネージャ１０２に与える場合でも、前述の関連情報はコンポーネント・エントリ１３１に含まれない可能性がある（および、コンポーネント・インデックス１０４内に全く存在しない可能性がある）。
【００５１】
方法３００には、１つまたは複数の資格認定条件を満たすアドイン・コンポーネントに対する要求をアプリケーションから受信する動作（動作３０２）が含まれる。それぞれの資格認定条件は、アドイン・コンポーネントが適切にアプリケーションと動作するためにアドイン・コンポーネントに関連付けられるべき機能性を表す。例えば、コンポーネント・マネージャ１０２は、条件（constraint）１１６をアプリケーション１０１から受信することができる。条件１１６は、ソフトウェア・アドイン・コンポーネントが適切にアプリケーション１０１と動作するためにソフトウェア・アドイン・コンポーネントに関連付けられるべきアドイン・コンポーネントの機能性を表すことができる。例えば、条件１１６は、アプリケーション１０１と動作する際にソフトウェア・アドイン・コンポーネントが特定のエントリ・ポイント・プロトコルを利用すること、プライベート・アプリケーション・ドメインで実行すること、を示すことができる。
【００５２】
幾つかの実施形態では、アドイン・コンポーネントは１つまたは複数の条件をコンポーネント・インデックスに登録する。前述の１つまたは複数の条件は、アプリケーションがアドイン・コンポーネントと相互に動作できる前に、アプリケーションが満足すべき、対応する１つまたは複数のプロパティを指定する。従ってコンポーネント１２２は、コンポーネント１２２と相互に動作するためにアプリケーション１０１が満足すべきプロパティを示す、１つまたは複数の条件を登録することがある。コンポーネント・マネージャ１０２は、アドイン・コンポーネントに対する条件をアプリケーションに送信することができる。例えば、コンポーネント・マネージャは（例えば、コンポーネント１２２に対する）条件１１６をアプリケーション１０１に送信することができる。
【００５３】
アドイン・コンポーネントの条件は、挙動に関してアプリケーションをチェックすること、またはアドイン・コンポーネントと相互に動作するためにアプリケーションが自身の挙動を変更するよう要求することに、使用されることができる。例えば、アプリケーション１０１は、デフォルトで同一のアプリケーション・ドメイン内の全てのアドイン・コンポーネントを実行することができる。しかしながら、コンポーネント１２２は、コンポーネント１２２を（例えば、コンポーネント１２２によってのみ使用される）別々のアプリケーション・ドメインで実行するようにアプリケーション１０１を制限することができる。従って、幾つかの実施形態では資格認定プロセスを、アプリケーションとアドイン・コンポーネントとの間の交渉と考えることができる。すなわち、アドイン・コンポーネントはアプリケーションの条件を満たす必要がある場合があり、アプリケーションはアプリケーションとアドイン・コンポーネントとの間の適切な相互動作のためにアドイン・コンポーネントの条件を満たす必要がある場合がある。コンポーネント１１６に対して示した双方向矢印は、交渉（negotiation）を表す。
【００５４】
方法３００には、１つまたは複数の資格認定条件と１つまたは複数の識別したプロパティとを比較する動作（動作３０３）が含まれる。例えば、コンポーネント・マネージャ１０２は、条件１１６をプロパティ１４１および１５１と比較することができる。方法３００には、前述の１つまたは複数の資格認定条件と前述の１つまたは複数の識別したプロパティを比較した結果に基づいて、候補アドイン・コンポーネントがアプリケーションでの使用に関して資格認定されるかどうかを決定する動作（動作３０４）が含まれる。例えば、コンポーネント・マネージャ１０２は、条件１１６をプロパティ１４１および１５１と比較した結果に基づいて、コンポーネント１２２がアプリケーション１０１での使用に関して資格認定されるかどうかを決定することができる。
【００５５】
すなわちコンポーネント・マネージャ１０２は、条件１１６が示す動作能力が、（プロパティ１４１および１５１が示すように）コンポーネント１２２によって実装されることが可能な動作能力であることを決定することができる。例えば、ソフトウェア・アドイン・コンポーネントが、プライベート・アプリケーション・ドメイン内で実行することすべきと条件が示し、ソフトウェア・アドイン・コンポーネントのプロパティが自身はプライベート・アプリケーション・ドメイン内で実行可能であることを示す場合、ソフトウェア・アドイン・コンポーネントは前述の条件を満たす。他方、ソフトウェア・アドイン・コンポーネントが特定のエントリ・ポイント・プロトコルを実装すると条件が示すが、ソフトウェア・アドイン・コンポーネントのプロパティが自身は特定のエントリ・ポイント・プロトコルを実装できないことを示す場合、このソフトウェア・アドイン・コンポーネントは前述の条件を満たさない。
【００５６】
方法３００を多数の（以前に発見した）アドイン・コンポーネントに対して繰り返して、アプリケーションでの使用に関して資格認定される潜在的なアドイン・コンポーネントのリストを生成することができる。従って、資格認定条件を満たす多数のアドインを、アプリケーションでの使用に関して資格認定することができる。前述したように、アドインの登録時にアドイン・マネージャ（例えば、コンポーネント・マネージャ１０２）に提供された情報と、アドイン・マネージャにより提供または維持されない他の情報とに基づいて、アドイン・コンポーネントは、資格認定されることができる。方法３００を使用して、アプリケーションによって潜在的に使用可能な（以前に発見した）アドイン・コンポーネントを精度良く選択することができる。
【００５７】
条件、プロパティ、比較、および条件を満たすことは、例に過ぎないことは理解されるべきである。本説明を検討すると、明示的に説明したものに加えて、本発明の実施形態は、他の条件、プロパティ、および比較を利用できること、および条件を他の方法で満たすことができることは当業界の技術者には明らかであろう。
【００５８】
幾つかの実施形態では、方法２００および方法３００が組み合わせて使用され、アドイン・コンポーネントおよびアプリケーションが資格認定されて、相互に運用され、指定の機能性を実装することを示す、アドイン・コンポーネントのリストを提供する。１つまたは複数の受信したプロパティをコンポーネント・インデックス・エントリ内のプロパティと比較することで、粗い発見プロセスを使用して利用可能なコンポーネント・アドインのサブセットを発見することができる。コンポーネント・インデックスをソートする際、発見プロセスは前述の１つまたは複数の受信したプロパティを満たす利用可能なアドイン・コンポーネントのサブセットを効率的に与えることができる。発見したアドイン・コンポーネントのサブセットから、高精度の資格認定プロセスは、１つまたは複数のアドイン・コンポーネントとアプリケーションが相互に動作することを資格認定することができる。資格認定は、コンポーネント・インデックス内の情報および／あるいはアドイン・コンポーネントまたはアプリケーションに関連付けた他の情報に基づくことができる。資格認定は双方向的（交渉）であることができる。すなわち、アドイン・コンポーネントはアプリケーションの条件を満たす必要がある場合があり、アプリケーションはアドイン・コンポーネントの条件を満たす必要がある場合がある。
【００５９】
資格認定されたソフトウェア・アドイン・コンポーネントを、例えば資格認定されたコンポーネント・リスト１１７のようなリストに含めることができ、アプリケーション１０１に送信することができる。幾つかの実施形態では、アプリケーション１０１は、適切なソフトウェア・アドイン・コンポーネントを資格認定されたコンポーネント・リストから選択する選択ロジックを使用して予め構成され、る。他の実施形態では、アプリケーション１０１は、資格認定されたコンポーネント・リストから適切なソフトウェア・アドイン・コンポーネントをユーザが選択することを可能にするユーザ・インターフェースを提示することができる。
【００６０】
アプリケーション１０１は、例えば、コンポーネント選択結果１１８のようなコンポーネント選択結果をコンポーネント・マネージャ１０２に返すことができる。それに応じて、コンポーネント・マネージャ１０２は選択したソフトウェア・アドイン・コンポーネントを起動することができる。例えば、コンポーネント・マネージャ１０２は起動１１９をファイル・システムに送信してコンポーネント１２２を起動することができる。起動１１９は、記憶装置１０３内のコンポーネント１２２を見つけるために、例えばディレクトリ・パスおよび名前のような識別子を含むことができる。起動１１９は条件１１６に従ってコンポーネント１２２を起動する命令を含むことができる。例えば、アプリケーション１０１が共有アプリケーション・ドメインを要求する場合、アプリケーション１０１を有する共有アプリケーション・ドメインでコンポーネント１２２を起動することができる。起動１１９は、条件１１６に従って、コンポーネント１２２をメモリにロードさせ、アプリケーション１０１とコンポーネント１２２との間の通信経路を確立させることができる。
【００６１】
満足される条件に従って確立可能な、一つのタイプの通信経路は、例えばパイプライン１８１のようなパイプラインである。パイプラインは１つまたは複数のノードのアプリケーシヨンプログラミング・インターフェース（以降、“ＡＰＩ”）、１つまたは複数のアダプタ、および少なくとも１つのパイプライン・プロトコル、を含むことができる。上記のパイプラインはＡＰＩ、アダプタ、および様々な量および組合せでのパイプライン・プロトコルを含むことができ、パイプライン要素の全てを必ずしも含む必要はない。ＡＰＩとは、オペレーティング・システムまたはランタイム実行環境のような対応する実行環境によって、手順の実行を方向付ける、アプリケーション、プログラム、関数、および他のプログラム可能かつ実行可能なコードのアセンブリによって使用される一連のルーチンを言う。アダプタとは、或るＡＰＩを別のＡＰＩへ通信可能に適合させることができる、かつ逐次的またはパイプライン・プロトコルとシリアルにあるいは経由で、リンクされることが可能なモジュールまたはオブジェクトを言う。パイプライン・プロトコルとは、そのＡＰＩが非排他的な例であるオブジェクトが通信可能な仕様またはコントラクトを言う。
【００６２】
従って、パイプライン（例えば、パイプライン１８１）は、パイプライン・プロトコルを通してホストＡＰＩアダプタからアドインＡＰＩアダプタへ流れ、第１のノード・アプリケーション（例えば、アプリケーション１０１）を第２のノード・アプリケーション（例えば、コンポーネント１２２）に接続する、コード・モジュールまたはオブジェクトの連鎖であることができる。しかしながら、満足される条件に従って他種の通信経路を確立することもできることは理解されるべきである。従って、本説明を検討すると、本発明の実施形態はパイプラインに加えて他のタイプの通信経路を利用できることは当業界の技術者には明らかであろう。
【００６３】
代替的な実施形態では、アプリケーション１０１は、要求１１１内にプロパティ１１２とともに条件（constraints）１１６を含めることができる。これらの代替実施形態では、コンポーネント・マネージャ１０２は、コンポーネント・インデックス１０４に、プロパティ１１２で示したタイプの、および条件１１６を満たす、ソフトウェア・アドイン・コンポーネントを問い合わせることができる。問い合わせを満たすソフトウェア・アドイン・コンポーネントを、資格認定されたコンポーネント・リスト１１７でアプリケーション１０１に返すことができる。
【００６４】
図４は、アプリケーションで使用するアドイン・コンポーネントを、要求されたアドイン・コンポーネントの機能性に基づいてロードする方法４００のフローチャートを示す。方法４００を、コンピュータ・システム・アーキテクチャ１００内のコンポーネントおよびデータに関して説明する。
【００６５】
方法４００には、コンピュータ・システムにある１つまたは複数のアドイン・コンポーネントが、アプリケーションが要求する特定のタイプのアドイン・コンポーネントであることを発見する動作（動作４０１）が含まれる。例えば、コンポーネント・エントリ内のプロパティとの比較を通して、コンポーネントモジュール１０２は、１つまたは複数のコンポーネント１２１、１２２、および１２３が、プロパティ１１２が示す特定のタイプ（例えば、ディクショナリ、コンテンツ・プロセッサ、等）であることを発見することができる。
【００６６】
方法４００には、少なくとも１つの発見したアドイン・コンポーネントを、その少なくとも１つの発見したアドイン・コンポーネントが１つまたは複数の資格認定条件を満たすことに基づいて資格認定する動作（動作４０２）が含まれる。前述の１つまたは複数の資格認定条件は、アドイン・コンポーネントが希望する形でアプリケーションと相互に動作するためにアドイン・コンポーネントに関連付けられるべき機能性を表す。例えば、コンポーネント・マネージャ１０２は、条件１１６を満たす任意のコンポーネント１２１、１２２、および１２３を資格認定することができる。（例えば、コンポーネント・エントリ内のプロパティとの比較を通して）条件１１６を満たすことは、アプリケーション１０１と希望する形で相互に動作する機能性をコンポーネントが含むこと（例えば、適切なパーミッション（permissions）を有すること、互換性のあるエントリ・ポイント・プロトコルを有すること、適切なアプリケーション・ドメインで実行可能であること、等）を表す。
【００６７】
方法４００には、アプリケーションで使用するための１つまたは複数の資格認定条件に従って資格認定されたアドイン・コンポーネントを起動する動作（動作４０３）が含まれる。例えば、コンポーネント・マネージャ１０２は条件１１６に従って、アプリケーション１０１で使用するコンポーネント１２２を起動することができる。
【００６８】
本発明の実施形態は、ソフトウェア・アドイン・コンポーネントの動的かつ柔軟な選択を促進し、アプリケーションに上記選択を行うロジックを含める必要はない。ソフトウェア・アドイン・コンポーネントが様々なロケーションに格納されるときでも、ソフトウェア・アドイン・コンポーネントをタイプにより発見することができる。ソフトウェア・アドイン・コンポーネントを、アプリケーションで使用するためにロードする前に、適切な機能性に対して資格認定することができる。ソフトウェア・アドイン・コンポーネントを資格認定することで、不適切に構成されたソフトウェア・アドイン・コンポーネントまたは悪意のあるソフトウェア・アドイン・コンポーネントをロードする可能性が削減される。従って、本発明の実施形態は、ソフトウェア・アドイン・コンポーネントの効率的で安全な使用を推進する。
【００６９】
本発明を、その精神または本質的な特徴から逸脱せずに他の特定の形態に組み入れることができる。説明した実施形態は、全ての点で例に過ぎず限定的ではないと考えるべきである。本発明の範囲は従って、前述の説明ではなく添付請求項によって示される。請求項と同等なものの意味および範囲内にある全ての変更は、それらの範囲に含まれるべきである。
【図面の簡単な説明】
【００７０】
【図１】ソフトウェア・アドイン・コンポーネントの発見する、資格認定する、および起動することを容易にするコンピュータ・アーキテクチャを示す図である。
【図２】アプリケーションに利用可能なアドイン・コンポーネントを発見する方法のフローチャートである。
【図３】アプリケーションに利用可能なアドイン・コンポーネントがアプリケーションでの使用に関して資格認定されるかどうかを決定する方法のフローチャートである。
【図４】要求されたアドイン・コンポーネントの機能性に基づいて、アプリケーションで使用するアドイン・コンポーネントをロードする方法のフローチャートである。
【図１】
2009512063.tif 000003
【図２】
2009512063.tif 000004
【図３】
2009512063.tif 000005
【図４】
2009512063.tif 000006
【国際調査報告】
2009512063.tif 000007
2009512063.tif 000008