(57)【要約】【課題】既インストールのアプリケーションに影響を与えず、遠隔場所からインストールできるアプリケーションを可能にし、完全に自己記述型のコンポーネントを含むアプリケーションをインストールするメカニズムを提供する。【解決手段】アプリケーションの各コンポーネントは、そのアプリケーションとともに格納されたアプリケーションマニフェスト１１２において識別される。アプリケーションマニフェストはアプリケーションの各コンポーネントの各種依存性を記述する情報も含む。アプリケーションに興味を持つ遠隔のユーザは、アプリケーションマニフェストで記述されるアプリケーションをローカルの格納場所１０６にダウンロードできる。共有コンポーネントの以前のバージョンに依存していた可能性がある既存のアプリケーションが引き続き以前のそのバージョンに依存し続けることを除き、アプリケーションの共有コンポーネントも共有される。【選択図】　図１
2004038962.tif 000002
【特許請求の範囲】
【請求項１】
コンピュータ実行可能命令が符号化されたコンピュー
タ可読媒体であって、
該コンピュータ実行可能命令は、
アプリケーションおよび前記アプリケーションの場所を識別するマニフェストの取得を開始するステップと、
前記アプリケーションに関連するコンポーネントをローカルデータストアにダウンロードするステップであって、各コンポーネントが各コンポーネントを他のコンポーネントから区別するのに十分に自己記述型であるステップと、
前記アプリケーションをサブスクリプションのために登録するステップとを含み、
サブスクリプションはさらに、前記サブスクリプションマニフェストを周期的に取得して前記サブスクリプションマニフェストが別のアプリケーションを識別するかを判定することと、識別する場合には、前記ダウンロードするステップと登録するステップを別のアプリケーションについて繰り返すことを含む
ことを特徴とするコンピュータ可読媒体。
【請求項２】
前記マニフェストはサブスクリプションマニフェストを含むことを特徴とする請求項１に記載のコンピュータ可読媒体。
【請求項３】
前記マニフェストはアプリケーションマニフェストを含むことを特徴とする請求項１に記載のコンピュータ可読媒体。
【請求項４】
前記マニフェストの取得を開始するステップはさらに、前記アプリケーションのダウンロードに関連するウェブページ上のハイパーリンクをアクチベートすることを含むことを特徴とする請求項１に記載のコンピュータ可読媒体。
【請求項５】
前記マニフェストの取得を開始するステップはさらに、自動化されたサブスクリプションサービスにより、サブスクリプション情報に基づいてマニフェストの前記取得を行わせることを含むことを特徴とする請求項１に記載のコンピュータ可読媒体。
【請求項６】
前記サブスクリプション情報はさらに、前記ローカルデータストアに格納された、周期的なアップグレードが登録されているアプリケーションを識別する情報を含むことを特徴とする請求項５に記載のコンピュータ可読媒体。
【請求項７】
前記マニフェストはサブスクリプションマニフェストを含み、
前記命令はさらに、前記コンポーネントのダウンロード前に、前記アプリケーションに関連し、前記サブスクリプションマニフェストにおいて識別されるアプリケーションマニフェストを取得するステップであって、前記アプリケーションマニフェストが各コンポーネントを他のコンポーネントから区別するのに十分な各コンポーネントの記述を含むステップを含む
ことを特徴とする請求項１に記載のコンピュータ可読媒体。
【請求項８】
前記アプリケーションマニフェストはさらに、前記アプリケーションに関連する各コンポーネントの依存性を記述することを特徴とする請求項７に記載のコンピュータ可読媒体。
【請求項９】
前記コンポーネントの少なくとも１つは共有コンポーネントを含むことを特徴とする請求項１に記載のコンピュータ可読媒体。
【請求項１０】
前記共有コンポーネントはアセンブリを含むことを特徴とする請求項９に記載のコンピュータ可読媒体。
【請求項１１】
前記アセンブリはストロングネームを含むことを特徴とする請求項１０に記載のコンピュータ可読媒体。
【請求項１２】
遠隔の格納場所からアプリケーションをインストールするためのコンピュータ実行可能な方法であって、
前記アプリケーションに関連するアプリケーションマニフェストを識別するステップであって、前記アプリケーションマニフェストが前記アプリケーションの各コンポーネントを一意に識別するのに十分な情報を含むステップと、
前記アプリケーションのコンポーネントをローカルストレージにダウンロードするステップであって、各コンポーネントは十分に自己記述型であり、既にインストールされたコンポーネントに依存する既存のアプリケーションが既にインストールされたそれらのコンポーネントに引き続き依存し、前記アプリケーションが前記アプリケーションとともにダウンロードされたコンポーネントに依存するステップと
を含むことを特徴とする方法。
【請求項１３】
前記アプリケーションマニフェストの前記情報をローカルにインストールされたアプリケーションと比較して、前記アプリケーションのコンポーネントがローカルにインストールされた一つのアプリケーションと関連して存在するかを判定するステップと、
存在する場合は、前記アプリケーションのコンポーネントのダウンロードを、ローカルにインストールされた一つのアプリケーションと関連して既に存在しないアプリケーションのコンポーネントに限定するステップと
をさらに含むことを特徴とする請求項１２に記載の方法。
【請求項１４】
前記アプリケーションのコンポーネントは対応コンポーネントのインストールされたバージョンに適用されるパッチを含み、
さらに、前記アプリケーションのコンポーネントのダウンロードを前記パッチに限定するステップを含むことを特徴とする請求項１２に記載の方法。
【請求項１５】
前記サブスクリプションマニフェストはさらに、前記アプリケーションマニフェストの場所の識別を含むことを特徴とする請求項１４に記載の方法。
【請求項１６】
前記アプリケーションマニフェストを識別するステップは、前記アプリケーションマニフェストをポイントするサブスクリプションマニフェストをダウンロードすることを含むことを特徴とする請求項１２に記載の方法。
【請求項１７】
サブスクリプションマニフェストの変化に応答して自動的にアップグレードされるように前記アプリケーションを登録するステップをさらに含むことを特徴とする請求項１２に記載の方法。
【請求項１８】
サブスクリプションマニフェストの変化に応答して前記方法を繰り返すステップであって、前記サブスクリプションマニフェストが前記アプリケーションに関連するステップをさらに含むことを特徴とする請求項１２に記載の方法。
【請求項１９】
前記アプリケーションマニフェストを識別するステップは、前記アプリケーションマニフェストをポイントするサブスクリプションマニフェストをダウンロードすることを含むことを特徴とする請求項１８に記載の方法。
【請求項２０】
データ構造が符号化されたコンピュータ可読媒体であって、
アプリケーションの一意の識別子を含む第１のフィールドと、
それぞれが他のコンポーネントから一意に区別される前記アプリケーションの各コンポーネントを識別する複数の第２のフィールドと、
前記アプリケーションの各コンポーネントが正常な動作のために依存するコンポーネントを識別する複数の第３のフィールドと
を備えることを特徴とするコンピュータ可読媒体。
【請求項２１】
前記第１のフィールドはさらに、前記アプリケーションに関連するハッシュ値を含むことを特徴とする請求項２０に記載のコンピュータ可読媒体。
【請求項２２】
前記第２のフィールドはそれぞれ、前記第２のフィールド個々に対応するコンポーネントに関連するハッシュ値をさらに含むことを特徴とする請求項２０に記載のコンピュータ可読媒体。
【請求項２３】
前記データ構造はＸＭＬベースの文書を含むことを特徴とする請求項２０に記載のコンピュータ可読媒体。
【請求項２４】
前記複数の第３のフィールドで識別された依存性は、依存するコンポーネントをストロングネームにより識別することを特徴とする請求項２０に記載のコンピュータ可読媒体。
【請求項２５】
前記複数の第３のフィールドで識別された依存性は、依存するコンポーネントを公開鍵トークンにより識別することを特徴とする請求項２４に記載のコンピュータ可読媒体。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、完全に自己記述型のコンポーネントを含むアプリケーションをインストールするメカニズムに関する。
【背景技術】
【０００２】
ソフトウェア開発者は、常にソフトウェアの開発プロセスを単純化しようと努めている。これを行う方法の１つは、それが理にかなうときはいつでもコードを再使用することである。例えば、非常に多くのソフトウェアアプリケーションが、ファイルを開くダイアログボックスによってユーザを促す。行われるタスクは、いくつかのソフトウェアアプリケーションでほぼ同じである可能性があるが、各アプリケーションは、ユーザにダイアログボックスを提示するコードにアクセスしなければならない。ソフトウェア開発者にいくつかの固有のダイアログボックスを独立して作成させるのではなく、現在の開発者は、その代わりに使用することが可能な、ダイアログボックスなど共通のコードを備える共有ライブラリを利用することができる。共有ライブラリを使用してコードを再使用することにより、開発プロセスが大幅に単純化され、人的エラーによって生じる可能性のあるエラーの数が低減する。完全に個別製作のソフトウェアよりは好適であるが、共有ライブラリの使用には問題点がないわけではない。
【０００３】
共有ライブラリを利用する複数のソフトウェアアプリケーションを書く場合、各アプリケーションは、そのソフトウェアアプリケーションが予期する状態で利用できる共有ライブラリに依存することになる。共有ライブラリを変更すると、共有ライブラリを参照するソフトウェアアプリケーションが予期できない振る舞いをする可能性があり、実際にしばしば生じている。これは、多くのソフトウェアアプリケーションで共有される可能性があるコードの開発強化にとって障害となる。アップグレードにより他のソフトウェアアプリケーションが正常に機能しなくなる可能性があるために、アップグレードがコード中のバグの修正である場合でも、共有ライブラリのアップグレードや修正を提供するのを妨げている。新しいソフトウェアアプリケーションは、それぞれ、それまでに存在しなかった状況を新たに生み出す可能性があるので、ある共有コードが遭遇しうるすべての状況でその共有コードをテストすることは不可能である。
【０００４】
共有ライブラリに伴うこうした問題点により、ソフトウェアアプリケーションをインストールまたはアップグレードすることがさらに難しくなっている。嘗ては、他のソフトウェアアプリケーションへの影響を懸念することなくソフトウェアアプリケーションをインストールまたはアップグレードすることができた。しかし、共有ライブラリを使用すると、もはやそのような場合ではない。今日の環境では、共有ライブラリを含むアプリケーションをインストールすると、他のソフトウェアアプリケーションがその共有ライブラリに依存している場合には、そのソフトウェアアプリケーションを誤動作させる可能性がある。多くの場合、共有ライブラリに対するごくわずかな変更でさえも他のアプリケーションに及ぼしうる影響を正確に予測することは難しい。これは、アプリケーションのインストールまたはアップグレードを通例は自動的に行わない理由の１つである。通例、インストールおよびアップグレードはユーザが介在して行われ、また恐らくより重要なこととして、その処理によって他のアプリケーションに予期せぬ結果が生じる恐れがあることをユーザに警告した上で行われる。こうした警告は、一般に、特にそのような事象が生じる理由やその問題の修復法を知らない、コンピュータに精通していないユーザを当惑させる。
【０００５】
こうした問題やその他の問題により、実行中のソフトウェアのインストールとアップグレードの実現が困難になっている。ユーザは、各自の既存のアプリケーションが（少なくとも部分的に）壊れるのではないかという不安から、ウェブページ上のハイパーリンクを１回クリックするだけでインストールされ、実行されるダウンロード可能なソフトウェアの簡易性を受け入れるのに時間がかかった。ソフトウェア開発者は、同じ不安からそのようなダウンロード可能ソフトウェアを提供することに消極的であった。ソフトウェアをダウンロードしインストールするための既存のメカニズムは、こうした不安を解消していない。
【０００６】
ソフトウェアをダウンロードしインストールする代替法も当業界で広く受け入れられているとは思われない。例えば、ホストされるアプリケーションの概念は、基本的に、遠隔からアクセス可能なサーバにアプリケーションを格納し、インストールすることを意味する。クライアントコンピュータは、そのサーバに接続し、アプリケーションを実行することができるが、その際には、そのアプリケーションのユーザインターフェース面（例えばキーストローク、マウスの動きおよびクリック、画面表示）だけがクライアントコンピュータとサーバ間でやり取りされる。しかし、このモデルは、ネットワークを通じてアプリケーションを実行することから生じる相対的な性能上の影響のために広く受け入れられてはいない。ユーザ体験は、クライアントとサーバ間の接続のバンド幅に直接結びついており、ネットワークに障害が起きた場合には、ホストされるアプリケーションが完全に使用不能になる。したがって、容易にダウンロードし、インストールまたはアップグレードすることができる、遠隔から管理されるソフトウェアの利便性がソフトウェアコミュニティに存在しない。
【考案の開示】
【発明が解決しようとする課題】
【０００７】
本発明は、既にインストールされたソフトウェアアプリケーションに影響を与えることなく、遠隔位置からインストール可能なソフトウェアアプリケーションを可能にすることを対象とする。本発明は、完全に自己記述型のコンポーネントを含むアプリケーションをインストールするメカニズムを提供する。
【課題を解決するための手段】
【０００８】
アプリケーションの各コンポーネントは、そのアプリケーションとともに記憶されたアプリケーションマニフェスト中で識別される。アプリケーションマニフェストは、アプリケーションの各コンポーネントの各種の依存性を記述する情報も含む。そのアプリケーションに興味を持つ遠隔のユーザは、アプリケーションマニフェストに記述されたアプリケーションをローカルの格納場所にダウンロードすることができる。以前のバージョンの共有コンポーネントに依存していた可能性のある既存アプリケーションがそのバージョンに依存し続けることを除いて、アプリケーションの共有コンポーネントも共有される。あるアプリケーションの異なるバージョンは並行してローカルに記憶される。
【発明を実施するための最良の形態】
【０００９】
本発明は、既存のソフトウェアに影響を与えずにインストールできるダウンロード可能なソフトウェアアプリケーションを可能にするマニフェストベースのシステムおよび方法を対象とする。
【００１０】
図１は、本発明の実装を実施することが可能な分散ネットワーキング環境１００の機能ブロック図による概略である。図１に示すように、サーバ１０２およびクライアントコンピュータ１２０など２つ以上のコンピュータがネットワーク１０５を通じて接続されている。これらのコンピュータは企業環境内で接続することができ、その場合ネットワーク１０５はローカルエリアネットワークであってもワイドエリアネットワークであってもよい。同様に、コンピュータは、任意でインターネットなどのワイドエリアネットワークを通じて接続してもよい。
【００１１】
サーバ１０２は、ネットワーク１０５に接続された他のコンピューティングシステムがリソースを利用できるようにするように構成されたコンピューティングシステムである。サーバ１０２は、ハイパーテキストマークアップ言語（ＨＴＭＬ）文書などのインターネット関連リソースをサービスするウェブサービスソフトウェアを含むことができる。サーバ１０２は、サーバデータストア１１０の形態のローカルストレージを含む。データストア１１０には、ネットワーク１０５を通じてサーバ１０２が利用できる状態になっているリソースの少なくとも一部がある。詳細には、アプリケーションコード１１５とアプリケーションマニフェスト１１２がデータストア１１０に格納されるが、これらについては下記で図２とともに詳細に説明する。サーバ１０２は、アプリケーションコード１１５を保持するため、およびアプリケーションマニフェスト１１２や他の関連文書およびリソースを構成し、保持するための他のアプリケーション（下記で詳細に説明する）も含む。この実装では、サーバ１０２は、アプリケーションコード１１５およびアプリケーションマニフェスト１１２を、ネットワーク１０５を通じて他のコンピューティングシステムが入手できるようにする。
【００１２】
クライアントコンピュータ１２０は、ローカルに実行されるアプリケーションを実行し、ネットワーク１０５を通じて他のコンピュータに接続するように構成されたコンピューティングシステムである。クライアントコンピュータ１２０も、クライアントデータストア１０６の形態のローカルストレージを含む。クライアントデータストア１０６には、ローカルアプリケーションストア１０９およびサブスクリプション情報１０７が常駐する。クライアントコンピュータ１２０は、ネットワークを通じて他のコンピュータと対話するための図示しない他のアプリケーション（例えばインターネットブラウジングソフトウェアなど）、およびローカルアプリケーションストア１０９とサブスクリプション情報１０７を保持するための他のアプリケーションも含む。クライアントコンピュータ１２０とその重要な各コンポーネントについては下記で図３との関係でより詳細に説明する。
【００１３】
簡単に述べたように、クライアントコンピュータ１２０のユーザは、任意の従来の方式でサーバ１０２に接続することができる。サーバ１０２は、サーバデータストア１１０に常駐するファイルを利用可能にするウェブページまたは何らかのその他のリソースを提示する。ユーザによるリンクの選択などに応答して、アプリケーションマニフェスト１１２がクライアントコンピュータ１２０に渡される。アプリケーションマニフェスト１１２は、名前、何らかの識別子、および可能性としてはアプリケーションに関連するハッシュ値により、アプリケーションを一意に識別する。アプリケーションマニフェスト１１２は、各コンポーネント、そのバージョン、および依存性を含めて、アプリケーションコード１１５を詳細に記述する。アプリケーションマニフェスト１１２を検討して、アプリケーションコード１１５がクライアントコンピュータ１２０にインストールされていない場合は、アプリケーションコード１１５がサーバ１０２からクライアントコンピュータ１２０に渡され、インストールされる。
【００１４】
本発明によれば、既存のソフトウェアアプリケーションに影響を及ぼす恐れなしに、アプリケーションコード１１５をクライアントコンピュータ１２０にインストールすることができる。今日のコンピューティングシステムの一部では、アプリケーションの各コンポーネントに「ストロングネーム（ｓｔｒｏｎｇｎａｍｅ）」を使用しているが、ストロングネームは、コンポーネントについての十分な情報を含み、コンポーネントが他の同様のコンポーネントから一意に識別される。例えば、共有ダイナミックリンクライブラリなどのコンポーネントのストロングネームは、コンポーネントのバージョン番号、ビルド番号などを含むことができる。ストロングネームを使用すると、デジタル署名と公開鍵を使用して、コンポーネントにグローバルに一意の識別が与えられる。
【００１５】
クライアントコンピュータ１２０の各アプリケーションは十分に自己記述型であり、（各自のストロングネームを含めて）各アプリケーションの各コンポーネントの依存性が分かる。また、アプリケーションコード１１５中の各コンポーネントは、各自の依存性を含めてアプリケーションマニフェスト１１２に十分に記述され、アプリケーションコード１１５の特定の共有コンポーネントがクライアントコンピュータ１２０の既存アプリケーションとコンフリクトするかどうかを判定することができる。そのために、既に各自の正確な状態でクライアントコンピュータ１２０に存在してないアプリケーションコード１１５のすべてのコンポーネントが、サーバ１０２から渡される。共有される既存コードまたはその他の既存コードは、クライアントコンピュータ１２０にそのまま残される。このように、クライアントコンピュータ１２０上の既存アプリケーションは、引き続き同じ共有コンポーネントと連動して動作し続け、新しくダウンロードされたアプリケーションは、そのアプリケーションが正常に動作させる必要があるすべてのコンポーネントを含む。新しいバージョンの共有コンポーネント（ストロングネームによって識別される）を参照するように既存アプリケーションの依存性が変更された場合にのみ、その既存アプリケーションは、その共有コンポーネントのダウンロードされたバージョンを使用する。
【００１６】
図２は、本発明により、遠隔のクライアントコンピュータにインストールするアプリケーションコードを提供する例示的サーバ１０２をより詳細に表す機能ブロック図である。図に示すように、サーバ１０２は、あるアプリケーションの２バージョン、すなわちアプリケーションバージョンＡ２０１とアプリケーションバージョンＢ２０２を含む。このアプリケーションの各バージョンは、実行ファイル、コンフィギュレーションファイルなどいくつかのプログラムファイル（２１０、２６０）を含む。アプリケーションの各バージョンは、２つ以上のアプリケーションプログラムで共有することができるダイナミックリンクライブラリであるアセンブリ（２１１、２６１）も含むことができる。あるいは、アプリケーションのコンポーネントは、そのアプリケーションのインストールバージョンの既存コンポーネントに適用されるパッチであってもよい。記憶スペースを節減し、ダウンロードバンド幅を低減するために、アプリケーションのいくつかのコンポーネントは、アーカイブフォーマットまたは圧縮フォーマット（例えばＣＡＢファイルやＺｉｐフォーマット）で格納することができる。
【００１７】
上述のように、アプリケーション内のコンポーネントは、各コンポーネントを他のコンポーネントから一意に識別するストロングネームで識別することができる。詳細には、共有されるアセンブリ２１１、２６１は、ストロングネームで識別する。この例では、アプリケーションバージョンＡ２０１は、ウェブサーバソフトウェア２５５によってネットワーク１０５を通じて他のコンピューティングシステムにサービスされている。もう一方のバージョン、アプリケーションバージョンＢ２０２は、将来の使用のため、またはアーカイブの目的でサーバ１０２に格納されている。アプリケーションの各バージョンは完全なものである。
【００１８】
呼び出されると、マニフェストジェネレータ２２５は、アプリケーションバージョンＡ２０１など選択されたバージョンのアプリケーションを評価し、いくつかのコンポーネント間の依存性を識別する。次いでマニフェストジェネレータ２２５は、選択されたアプリケーションバージョンのアプリケーションマニフェスト２１２を作成する。一実装では、アプリケーションマニフェスト２１２は、選択されたアプリケーションの各コンポーネントをそのストロングネームで識別するＸＭＬ（ｅＸｔｅｎｓｉｂｌｅＭａｒｋｕｐＬａｎｇｕａｇｅ）ベースの文書であり、ハッシュ値、公開鍵トークンなど各コンポーネントを一意に識別するのに役立つ追加的な情報を含むことができる。このような性質のアプリケーションマニフェストのサンプルを「付録Ａ−アプリケーションマニフェストサンプル」として本明細書に含めている。付録Ａは連続する一つのサンプルである。別の実装では、アプリケーションマニフェスト２１２は、アプリケーションの実行可能コンポーネントへのエントリポイントの内側にパッケージされた情報であってもよい。本明細書では特定のファイルとして説明するが、本発明のアプリケーションマニフェスト２１２は、任意の形態でアプリケーションのコンポーネントを記述する情報を意味するものと解釈されたく、ここに記載する以外の場所に存在することができる。ここに記載するアプリケーションマニフェスト２１２は例証に過ぎない。
【００１９】
また、マニフェストジェネレータ２２５は、数バージョンのアプリケーションのうち現在ウェブサーバソフトウェア２５５によってサービスされているバージョンを識別するデフォルトのサブスクリプションマニフェスト２５０も作成することができる。サブスクリプションマニフェスト２５０は、現在のバージョンのアプリケーションのアプリケーションマニフェスト２１２をポイントする識別情報（例えばユニバーサルリソースロケータ）を含む別のＸＭＬベースの文書である。本発明の実施で使用することができるサブスクリプションマニフェストのサンプルを「付録Ｂ−サブスクリプションマニフェストサンプル」として本明細書に含めている。
【００２０】
ウェブサーバソフトウェア２５５は、サブスクリプションマニフェスト２５０へのハイパーリンクを含むＨＴＭＬファイルまたは他のウェブによるアクセスが可能なページを利用可能な状態にすることができる。このようにしてリモートコンピュータはＨＴＭＬファイルにアクセスし、ハイパーリンクをアクチベートし、サブスクリプションマニフェスト２５０を入手し、そしてサブスクリプションマニフェスト２５０で識別される現在のバージョンのアプリケーションを取得することができる。このように、単に別のバージョンのアプリケーションを識別するようにサブスクリプションマニフェスト２５０を修正することにより、パブリッシャは、直ちにもう一方のバージョンのアプリケーションをサービスし始めることができる。各バージョンは完全であり自己記述型なので、新しい現在のバージョンを取得し、インストールしてしまうと、現在のバージョンを変更することによって他のソフトウェアアプリケーションに否定的な影響が及ぶ恐れがない。サブスクリプションマニフェスト２５０は、消費側のシステムがどの程度の頻度で更新をチェックすべきか、またはいつチェックを行うかについての命令など、他の情報も含むことができる。
【００２１】
図３は、本発明により、サーバからアプリケーションを取得し、ロードすることができる例示的なクライアントコンピュータ１２０をより詳細に表す機能ブロック図である。クライアントコンピュータ１２０は、ユーザがネットワークを通じて遠隔の場所に接続することを可能にするウェブブラウジングソフトウェア３０２を含む。ウェブブラウジングソフトウェア３０２は、オペレーティングシステムなどのコンポーネントとして含めることができる。この例では、ウェブブラウジングソフトウェア３０２は、クライアントコンピュータ１２０のユーザが、サブスクリプションマニフェスト２５０へのハイパーリンクを含む上述のサーバ１０２などのサーバからウェブページなどを入手することを可能にする。ここで一時的に図４を見ると、上述のサーバ１０２によってサービスできるウェブページ４１０を含むウェブブラウジングソフトウェア３０２の表示例４１２を示している。ウェブページ４１０は、ソフトウェアアプリケーションを遠隔のコンピューティングシステムがダウンロードできる状態にするためのリソースである。ウェブページ４１０は、上述のサブスクリプションマニフェスト２５０をポイントするハイパーリンク４６０を含む。あるいは、ハイパーリンク４６０は、サブスクリプションマニフェスト２５０ではなく直接アプリケーションマニフェスト２１２をポイントするように構成してもよい。
【００２２】
ウェブページ４１０は、インターネット、企業イントラネット、あるいは任意の他のネットワークアクセスが可能な場所を通じて提供できることが認識されよう。ハイパーリンク４６０をアクチベートすると、サブスクリプションマニフェスト２５０がサーバから送られる。ウェブページ４１０は、ユーザがサブスクリプションマニフェスト２５０の通知を受け取ることができる１方式に過ぎないことを理解されたい。例えば、サブスクリプションマニフェスト２５０へのリンクは電子メールメッセージなどに提供することができる。別の代替法では、サーバ１０２に格納された他のバージョンのアプリケーションをポイントする複数のハイパーリンク（例えばハイパーリンク４７０）を提供することも可能である。このように、現在のバージョンのアプリケーションを所望しないユーザは、そのアプリケーションのより古いバージョンまたは代替バージョンを取得し、インストールすることを選択することができる。
【００２３】
図３に戻ると、サブスクリプションマニフェスト２５０を取得すると、処理のためにそれをアクチベートコンポーネント３０８に渡す。この実装では、アクチベートコンポーネント３０８は、サブスクリプションマニフェスト２５０を構文解析し、アプリケーションの名前、バージョン、および場所など対応するアプリケーションを識別するのに十分な情報を抽出するように構成される。ハイパーリンク４６０が直接アプリケーションマニフェスト２１２をポイントする場合は、その情報を直接アプリケーションマニフェスト２１２から取得することができる。その情報により、アクチベートコンポーネント３０８はローカルアプリケーションストア１０９に問い合わせて、識別されるアプリケーションが既にクライアントコンピュータ１２０にローカルに格納されているかどうかを判定することができる。ローカルアプリケーションストア１０９は、インストールされているアプリケーション３０５のローカルコピーと、アプリケーション固有のセキュリティ情報３０７を含む。より詳細には、各アプリケーションをダウンロードする際に、そのアプリケーションに関連するＵＲＬをアプリケーションコードとともにキャッシュする。これを行うことにより、そのアプリケーションをインストールした際に有効であったセキュリティ特権が、その後実行されるそのアプリケーションのインスタンスに引き続き適用される。例えば、あるインターネット上の場所（そのＵＲＬによって識別される）からアプリケーションをダウンロードする場合は、そのインターネットゾーンに適用されるセキュリティ特権を、そのアプリケーションが実行されるたびにアプリケーションに適用することができる。
【００２４】
アクチベートコンポーネント３０８が、サブスクリプションマニフェスト２５０で識別されるアプリケーションがローカルにインストールされていないと判定した場合、アクチベートコンポーネント３０８は、そのアプリケーションに関する情報をダウンロードコンポーネント３０９に渡す。ダウンロードコンポーネント３０９は、そのアプリケーションに関連するダウンロードデータ３１５を取得し、アプリケーションをローカルにインストールするように構成される。具体的には、ダウンロードコンポーネント３０９は、サブスクリプションマニフェスト２５０で識別されるアプリケーションマニフェスト１１２を取得し、アプリケーションマニフェスト１１２を構文解析して、アプリケーションコンポーネントと依存性を識別することができる。ダウンロードコンポーネント３０９は次いで、まだローカルに格納されていないアプリケーションコンポーネントをサーバ１０２から取得することができる。ここで再度、各アプリケーションコンポーネントはストロングネームによって識別されるので、アプリケーションマニフェストにおいて識別されるコンポーネントと同一のローカルコンポーネントだけを使用し、他のコンポーネントはサーバ１０２から取得することに留意されたい。同様に、ダウンロードするコンポーネントは、既存バージョンのアプリケーションのインストール済みコンポーネントに適用できるパッチとして、さらにダウンロードコストを低減してもよい。サーバ１０２からパッチをダウンロードする場合、そのパッチは既存のアプリケーションコンポーネントのコピーに適用されるが、その後はそのアプリケーションの別の新しいバージョンとしてローカルに格納されることを理解されたい。このプロセスは各アプリケーションバージョンの並行性を維持し、同時にダウンロードの負担をさらに低減する。アプリケーションコンポーネントをダウンロードすると、ダウンロードコンポーネント３０９はそのコンポーネントに関連する署名を検証してそのコンポーネントを認証し、ハッシュチェックを行って正しいコンポーネントを取得したことを保証し、そのアプリケーションコンポーネントをアプリケーションストア１０９に入れる。あるいは、特定のコンポーネントは識別して、ただちにダウンロードするのではなく要求時にダウンロードすることもできる。
【００２５】
ダウンロードコンポーネント３０９がクライアントコンピュータ１２０に関連する情報を検証するか、またはアプリケーションをダウンロードしインストールするのに十分な権限があることをユーザが保証することを要求するデジタル権利管理システムを（サーバ１０２またはクライアントコンピュータ１２０のいずれか、または両方に）実装することができる。また、インストールプロセスの一部として、アプリケーションを購入するために要求されるライセンス同意をユーザに求めることもできる。
【００２６】
図３には単一のエンティティとして示しているが、アプリケーションストア１０９は実際にはクライアントデータストア１０６内の複数の場所に常駐することができる。例えば、アプリケーションストア１０９は、多くのアプリケーションコンポーネントが格納された場所と、共有コンポーネントが格納された別の場所（例えばグローバルアセンブリキャッシュ）とを含むことができる。
【００２７】
最終的にアプリケーションコンポーネントをローカルアプリケーションストア１０９に入れると、アクチベートコンポーネント３０８はそのアプリケーションをサーバコンポーネント３１２に登録する。サーバコンポーネント３１２は、サブスクライブされるアプリケーションの変更がないか、サブスクリプションマニフェスト２５０など登録されたサブスクリプションマニフェストを周期的にポーリングする役割を担うローカルサービスである。サーバコンポーネント３１２は、サブスクライブされる各アプリケーション、そのアプリケーションのサブスクリプションマニフェストの場所、およびサブスクリプションマニフェストが変化したかどうかを判定する時間間隔を識別するサブスクリプション情報３１４を保持する。一実装では、クライアントコンピュータ１２０がアイドル状態であるときに、サーバコンポーネント３１２は、サブスクライブされるアプリケーションのサブスクリプションマニフェストを取得することを試み、変化しているサブスクリプションマニフェストがある場合には、変更されたサブスクリプションマニフェストがアクチベートコンポーネント３０８に渡されて、サブスクライブされるアプリケーションの新しいバージョンがあればそれを自動的に取り込む。
【００２８】
ここでも、各アプリケーションは並行してローカルに格納されるので、各アプリケーションのコンポーネント間にコンフリクトがない。したがって、インストールされた他のアプリケーションに影響を与えることなく、あるアプリケーションの新しいバージョンをダウンロードし、インストールすることができる。これは、上述のようにストロングネームをつけたアプリケーションコンポーネントを使用することによって可能になる。さらに、アプリケーションを並行してローカルにインストールするので、各アプリケーションバージョンが一意になり、ユーザが以前に使用していたバージョンに戻りたい場合には効果的なロールバックに対する向上したサポートが得られる。簡潔に述べると、各アプリケーションが他のアプリケーションから独立しているので、既存のアプリケーションに影響を与えずにインストールできるのと同様に、別のアプリケーションに影響を与える恐れなくアプリケーションをアンインストールすることができる。
【００２９】
本発明によって構想される並行型のインストールは、特定のアプリケーションコンポーネント、特に共有コンポーネントに割り当てられるストロングネームによって可能になることに留意されたい。コンポーネントがグローバルに一意でない、従来のまたは伝統的なネーミング技術を使用して並行のインストールを試みると、各種の理由により失敗する可能性がある。例えば、単にあるアプリケーションのすべてのコンポーネントを１つのディレクトリに格納することは、共有コンポーネントにパッチを当てるのが難しくなるので十分とは言えない。インストールされたアプリケーションおよびその他のアプリケーションによってあるコンポーネントが共有される場合は、そのコンポーネントにパッチを適用すると、そのパッチを適用するためにその共有コンポーネントのすべての他のインスタンスを見つけることも必要となる。コンポーネントを（ストロングネームや何らかのその他のメカニズムにより）一意に識別することができないと、（例えば）ビルド番号だけが異なる２つ以上の同一の共有コンポーネントが、１つの共有コンポーネント位置で容易に共存することができない。本発明はこれらの制限を克服する。
【００３０】
サブスクリプションを登録すると、アクチベートコンポーネント３０８は管理されるホスティングコンポーネント３３０にコントロールを渡し、ホスティングコンポーネント３３０は、そのアプリケーションを取得した場所のＵＲＬとセキュリティ特権に基づいて、そのアプリケーションをセキュアなアプリケーションドメイン（例えば「サンドボックス」）で開始する。また、アプリケーションまたはアプリケーションのコンポーネントは、パブリッシャによってデジタル的に署名することができる。その場合にはパブリッシャのデジタル署名を使用して、実行アプリケーションにサンドボックスを超える許可を提供することができる。すなわち、サンドボックスが適用されるアプリケーションに与えられる共通の許可以外に、特定パブリッシャからのアプリケーションに権利を付与するセキュリティ情報をクライアントコンピュータ１２０に格納することができる。管理されるホスティングコンポーネント３３０は、オンデマンドコンポーネントのダウンロードと、共有コンポーネントの単一のインスタンス化のためにも提供することができる。
【００３１】
図５は、ネットワークを通じて利用可能になっているアプリケーションを取得し、インストールするプロセスを概説する論理的流れ図である。このプロセスは、ユーザが、アプリケーションに関連するハイパーリンクを選択するなど、何らかの方式でアプリケーションをインストールする要求を示したところから開始する。プロセスはブロック５０３で開始し、アプリケーションに関連するサブスクリプションマニフェストの取得を開始する。一実施形態では、ウェブページ上のハイパーリンクがサブスクリプションマニフェストをポイントし、ユーザは、そのハイパーリンクをトリガすることによりアプリケーションをダウンロードおよびインストールする要求を表し、サブスクリプションマニフェストをクライアントコンピュータにダウンロードさせる。
【００３２】
ブロック５０５で、アプリケーションを記述する情報を含むアプリケーションマニフェストを取得する。この実施形態では、サブスクリプションマニフェストは、そのアプリケーションマニフェストがどこに存在するかを識別する情報を含む。その情報に基づいて、アプリケーションマニフェストを取得する。
【００３３】
判定ブロック５０７で、同一バージョンのアプリケーションが既にローカルに存在するかどうかを判定する。この判定は、アプリケーションマニフェストを構文解析してアプリケーションについての識別情報を識別し、その識別情報とローカルにインストールされたアプリケーションとを比較することによって行うことができる。同一のアプリケーションが既にインストールされている場合、プロセスはブロック５１７でローカルに格納されたバージョンのアプリケーションを実行する。そうでない場合、プロセスはブロック５０９に進む。
【００３４】
ブロック５０９で、アプリケーションのコンポーネントをダウンロードする。次にアプリケーションマニフェストにおいて識別される各コンポーネントをダウンロードすることができる。ダウンロードプロセスの一部として、各コンポーネントの記述を、既にローカルに格納されている各コンポーネントの記述と比較することができ、既にローカルに格納されているコンポーネントはダウンロードから除外できることを理解されよう。
【００３５】
ブロック５１１で、ダウンロードしたコンポーネントをローカルアプリケーションストアに格納する。共有コンポーネントは、グローバルキャッシュまたはシステムキャッシュに格納して複数のアプリケーションで利用できるようにすることができる。
【００３６】
ブロック５１５で、サブスクリプションのためにアプリケーションを登録する。一実装では、サブスクライブされるアプリケーションの現在発行されているバージョンに変更がないか、サーバコンポーネントが周期的にポーリングを行う。これは、アプリケーションのパブリッシャによって保持されるサブスクリプションマニフェストを見つけ、サブスクリプションマニフェストにおいて識別されるアプリケーションのバージョンと、現在インストールされているアプリケーションとを比較することによって実現することができる。サブスクリプション中の設定に基づいて、サブスクライブされているアプリケーションのより新しいバージョンを自動的にクライアントコンピュータにダウンロードすることができる。大規模なアプリケーションなど特定の事例では、ユーザにＵＩを提示して、ダウンロードが行われていることを通知し、ダウンロードおよびインストールの進行状況を提供することができる。最後にブロック５１７で、ローカルにインストールされたアプリケーションを実行する。
【００３７】
図６は、本発明の一実装により、アプリケーションを自己記述型にし、ネットワークを通じてダウンロードできる状態にするプロセスを概説する論理的流れ図である。このプロセスは、アプリケーションのパブリッシャまたは開発者がアプリケーションをダウンロード可能な状態にする要求を示した際に開始する。処理はブロック６０３で開始する。
【００３８】
ブロック６０３で、アプリケーションを分析してその構成部分（コンポーネント）を判定し、各構成部分間の依存性を識別する。この情報は、アプリケーションと関連付けてアプリケーションマニフェストに格納することができる。
【００３９】
ブロック６０６で、インストールされたアプリケーションを識別するサブスクリプションマニフェストを作成し、このサブスクリプションマニフェストは、そのアプリケーションをダウンロードしたいユーザがネットワークを介して入手できるようにする。サブスクリプションマニフェストは、アプリケーションを一意に識別し、アプリケーションの場所を識別する情報を含む。一実装では、サブスクリプションマニフェストは、そのアプリケーションに対応するアプリケーションマニフェストをポイントするＵＲＬを含む。
【００４０】
ブロック６１１で、アプリケーションおよびサブスクリプションマニフェストを、ネットワークを通じた公開のために公衆にアクセス可能な場所にコピーする。一実装では、公衆にアクセス可能な場所は、ウェブサービスソフトウェアによって維持されるパブリックシェアに対応することができる。別の実装では、公衆にアクセス可能な場所は、企業イントラネットなどに対応することができる。
【００４１】
ブロック６１５で、アプリケーションをダウンロードしたいユーザにサブスクリプションマニフェストへのリンクを発行する。例えば、サブスクリプションマニフェストへのリンクを含むウェブページを作成することができる。アプリケーションをクライアントコンピュータにダウンロードしたいユーザは、そのウェブページを訪れ、リンクをアクチベートすることができる。それに応答して、サブスクリプションマニフェストをユーザのクライアントコンピュータに取得することができる。クライアントコンピュータが適切に構成されている場合には、次いでサブスクリプションマニフェスト中でポイントされるアプリケーションをダウンロードし、クライアントコンピュータにインストールすることができる。
【００４２】
上記の仕様、実施例およびデータは、本発明の構成の製造および使用の完全な説明を提供する。本発明の精神および範囲から逸脱することなく本発明の多くの実施形態を作成することができるため、本発明は特許請求の範囲に存る。
【００４３】
付録Ａ．アプリケーションマニフェストサンプル
【００４４】
【表１】
2004038962.tif 000003
【００４５】
【表２】
2004038962.tif 000004
【００４６】
【表３】
2004038962.tif 000005
【００４７】
付録Ｂ．サブスクリプションマニフェストサンプル
【００４８】
【表４】
2004038962.tif 000006
【図面の簡単な説明】
【００４９】
【図１】本発明の実装を実施することが可能な分散ネットワーキング環境の概略機能ブロック図である。
【図２】本発明により、リモートクライアントコンピュータにインストールするアプリケーションコードをサービスする例示的サーバを詳細に示す機能ブロック図である。
【図３】本発明により、サーバからアプリケーションを取得し、ロードすることができる例示的クライアントコンピュータを示す機能ブロック図である。
【図４】本発明の一実装による、ウェブブラウジングソフトウェアによって提示し、リモートアプリケーションのダウンロードを可能にすることができる例示的な画像表示を示す図である。
【図５】ネットワークを通じて利用することができるアプリケーションを取得し、インストールするプロセスを概説する論理的流れ図である。
【図６】本発明の一実装による、アプリケーションを自己記述型とし、ネットワークを通じてダウンロードできるようにするプロセスを概説する論理的流れ図である。
【符号の説明】
【００５０】
１０２　サーバ
１０５　ネットワーク
１０６，１１０　データストア
１０７，３１４　サブスクリプション情報
１０９　ローカルアプリケーションストア
１１２，２１２　アプリケーションマニフェスト
１１５　アプリケーションコード
１２０　クライアントコンピュータ
２０１　アプリケーションバージョンＡ
２０２　アプリケーションバージョンＢ
２１０，２６０　プログラムファイル
２１１，２６１　アセンブリ
２２５　マニフェストジェネレータ
２５０　サブスクリプションマニフェスト
２５５　ウェブサーバソフトウェア
３０２　ウェブブラウジングソフトウェア
３０５　インストールされたアプリケーション
３０７　セキュリティ情報
３０８　アクチベートコンポーネント
３０９　ダウンロードコンポーネント
３１２　サーバコンポーネント
３１５　ダウンロードデータ
３３０　管理されるホスティングコンポーネント
４１０　ウェブページ
４６０，４７０　ハイパーリンク
【図１】
2004038962.tif 000007
【図２】
2004038962.tif 000008
【図３】
2004038962.tif 000009
【図４】
2004038962.tif 000010
【図５】
2004038962.tif 000011
【図６】
2004038962.tif 000012
【外国語明細書】
2004038962.tif 000013
2004038962.tif 000014
2004038962.tif 000015
2004038962.tif 000016
2004038962.tif 000017
2004038962.tif 000018
2004038962.tif 000019
2004038962.tif 000020
2004038962.tif 000021
2004038962.tif 000022
2004038962.tif 000023
2004038962.tif 000024
2004038962.tif 000025
2004038962.tif 000026
2004038962.tif 000027
2004038962.tif 000028
2004038962.tif 000029
2004038962.tif 000030
2004038962.tif 000031
2004038962.tif 000032
2004038962.tif 000033
2004038962.tif 000034
2004038962.tif 000035
2004038962.tif 000036
2004038962.tif 000037
2004038962.tif 000038
2004038962.tif 000039
2004038962.tif 000040
2004038962.tif 000041