(57)【要約】【課題】拡張プログラム本体に専用の処理を追加せずに、有効なライセンスが存在しない拡張プログラムの起動を防止することができる画像形成装置を提供する。【解決手段】この画像形成装置は、ライセンス管理されたアプリケーションのライセンスを監視する監視ソフトウェアと、当該アプリケーションの起動時に参照するパッケージを書き込んで監視ソフトウェアを更新する第１更新手段と、起動時にパッケージを参照するようにライセンス管理されたアプリケーションを更新する第２更新手段と、パッケージを参照してライセンス管理されたアプリケーションを起動する起動手段と、を備える。第１更新手段は、ライセンスが無効である場合、パッケージを削除して監視ソフトウェアを更新し、起動手段は、監視ソフトウェアにパッケージが含まれる場合、アプリケーションを起動し、パッケージが含まれない場合、アプリケーションを起動しない。【選択図】  図４
2016081278.tif 000002
【特許請求の範囲】
【請求項１】
ライセンス管理されたアプリケーションを実行可能な画像形成装置であって、
前記ライセンス管理されたアプリケーションのライセンスの状態を監視する監視ソフトウェアと、
前記ライセンス管理されたアプリケーションの起動時に参照するパッケージを書き込んで前記監視ソフトウェアを更新する第１更新手段と、
前記起動時に前記パッケージを参照するように前記ライセンス管理されたアプリケーションを更新する第２更新手段と、
前記パッケージを参照して前記ライセンス管理されたアプリケーションを起動する起動手段と、を備え、
前記起動手段は、前記監視ソフトウェアに前記パッケージが含まれる場合、前記アプリケーションを起動し、前記監視ソフトウェアに前記パッケージが含まれない場合、前記アプリケーションを起動しない
ことを特徴とする画像形成装置。
【請求項２】
前記起動手段は、前記ライセンス管理されたアプリケーションをインストールする際に、前記監視ソフトウェアが稼働中である場合、前記稼働中の監視ソフトウェアを停止させ、前記第１更新手段は、前記インストールするアプリケーションの起動時に参照するパッケージを書き込んで更新する
ことを特徴とする請求項１に記載の画像形成装置。
【請求項３】
前記起動手段は、前記監視ソフトウェアがアンインストールされた場合、前記アンインストールされた監視ソフトウェアに含まれるパッケージを参照する前記ライセンス管理されたアプリケーションが稼働中であれば、前記アプリケーションを終了させる
ことを特徴とする請求項１または２に記載の画像形成装置。
【請求項４】
前記起動手段は、前記ライセンス管理されたアプリケーションを起動しない場合、エラーメッセージを通知する
ことを特徴とする請求項１〜３のいずれか１項に記載の画像形成装置。
【請求項５】
前記エラーメッセージには、起動できなかった前記ライセンス管理されたアプリケーションの起動時に参照する前記パッケージの情報が含まれる
ことを特徴とする請求項４に記載の画像形成装置。
【請求項６】
前記ライセンス管理されたアプリケーションのライセンスが無効である場合、前記第１更新手段は、稼働中の監視ソフトウェアと異なる別の監視ソフトウェアに含まれる前記ライセンスが無効のプリケーションに対応するパッケージを削除して、前記別の監視ソフトウェアを更新し、前記起動手段は、前記第１更新手段により更新された前記別の監視ソフトウェアを起動する
ことを特徴とする請求項１に記載の画像形成装置。
【請求項７】
前記起動手段は、前記ライセンスが無効のアプリケーションが稼働している場合、前記第１更新手段が前記別の監視ソフトウェアを更新する前に、前記ライセンスが無効のアプリケーションを終了する
ことを特徴とする請求項６に記載の画像形成装置。
【請求項８】
前記第１更新手段は、前記別の監視ソフトウェアを起動した後に、前記稼働中の監視ソフトウェアに含まれる前記パッケージを削除して前記稼働中の監視ソフトウェアを更新する
ことを特徴とする請求項６または７に記載の画像形成装置。
【請求項９】
前記起動手段は、前記監視ソフトウェアに補助ソフトウェアが含まれる場合、前記補助ソフトウェアを含む監視ソフトウェアを優先的に起動する
ことを特徴とする請求項１に記載の画像形成装置。
【請求項１０】
前記起動手段は、前記監視ソフトウェアを起動する場合、前記補助ソフトウェアを含む監視ソフトウェアが稼働していなければ、前記補助ソフトウェアを含まない監視ソフトウェアを起動することなく、前記補助ソフトウェアを含む監視ソフトウェアを起動する
ことを特徴とする請求項９に記載の画像形成装置。
【請求項１１】
ライセンス管理されたアプリケーションのライセンスの状態を監視する監視ソフトウェアを備える、前記ライセンス管理されたアプリケーションを実行可能な画像形成装置の制御方法であって、
前記ライセンス管理されたアプリケーションの起動時に参照するパッケージを書き込んで前記監視ソフトウェアを更新する第１更新工程と、
起動時に前記パッケージを参照するように前記ライセンス管理されたアプリケーションを更新する第２更新工程と、
前記パッケージを参照して前記ライセンス管理されたアプリケーションを起動する起動工程と、を有し、
前記起動工程において、前記監視ソフトウェアに前記パッケージが含まれる場合、前記アプリケーションは起動され、前記監視ソフトウェアに前記パッケージが含まれない場合、前記アプリケーションは起動されない
ことを特徴とする画像形成装置の制御方法。
【請求項１２】
請求項１〜１０のいずれか１項に記載の画像形成装置の各手段としてコンピュータを機能させるためのプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、画像形成装置、画像形成装置の制御方法、及びプログラムに関し、特にアプリケーションのライセンス管理をし、ライセンスが切れたアプリケーションの利用を防止する画像形成装置に関する。
【背景技術】
【０００２】
近年、アプリケーションソフトウェアを機能拡張プログラムとして追加できる機能を備えた画像形成装置が普及している。そして、機能拡張プログラム（以下、拡張プログラム）は工場出荷時だけでなく、画像形成装置の設置後の運用段階でも追加することが可能である。拡張プログラムには有償のものと無償のものが存在する。また、有償の拡張プログラムであっても、一定期間は無償で使用できる試用版といったものも存在する。拡張プログラムの使用にあたっては、ライセンスが切れた場合の利用を防ぐためにライセンス管理が行われる。ライセンス管理の一例として、販売者がライセンス情報を記載したライセンスファイルを発行し、拡張プログラムのインストール時にライセンスファイルを適用するといった方法がある。
【０００３】
また、ライセンスに有効期限がある場合や、使用回数などに制限がある場合などは、拡張プログラムの使用時にも、ライセンスが有効であることを確認する必要がある。ライセンスの確認方法には、拡張プログラム本体にライセンスを確認する処理を記載する方法がある。別の方法としては、特許文献１において、拡張プログラムとは別にライセンス監視のためのインスタンス（プロセス）を用意し、用意した別のインスタンスが拡張プログラムの使用状況とライセンスの状態を監視する方法が開示されている。ライセンスを監視するインスタンス（以下、ライセンス監視インスタンス）は、有効なライセンスが存在しないと判断した場合、拡張プログラムが稼働中であれば、その拡張プログラムを終了させることで、ライセンスが切れた場合の利用を防止する。
【０００４】
ここで、インスタンスとは、個々のプログラムが稼働した状態を指す。また、プログラムの状態遷移（ライフサイクル）を以下のように定義する。「起動」は、プログラムをインスタンス化することを意味する。「稼働」は、プログラムがインスタンス化した状態を意味する。「終了」は、インスタンスを終了することを意味する。「停止」は、プログラムがインスタンス化していない状態を意味する。つまり、プログラムは、「起動」することで「稼働」状態となり、「終了」することで「停止」状態となる。
【先行技術文献】
【特許文献】
【０００５】
【特許文献１】特開２００１−８４１３７号公報
【発明の概要】
【発明が解決しようとする課題】
【０００６】
しかしながら、特許文献１では、拡張プログラムとは別のライセンス監視インスタンスでライセンスの状態を監視する方法を開示しているが、有効なライセンスが存在しない拡張プログラムの起動を完全に防止することができない。具体的には、ライセンス監視インスタンスは、拡張プログラムの起動を検知した後、ライセンスチェックを行い、有効なライセンスが存在しない場合、拡張プログラムを終了させる。この場合、拡張プログラムが終了するまでの短時間に拡張プログラムが稼働してしまう可能性がある。この時、短時間でも拡張プログラムが稼働した場合、拡張プログラムの処理によって問題が発生する可能性がある。例えば、拡張プログラムの起動時に外部のネットワークに対して通信を行なったり、画像形成装置の実行ログを収集する場合がある。
【０００７】
また、拡張プログラムの起動を検知するために、ライセンス監視インスタンスが拡張プログラムの起動を定期的に確認（ポーリング）する必要がある。ライセンス監視インスタンスによるポーリングは、ポーリングの間隔が長い場合、拡張プログラムの起動を検知するのが遅くなり、有効なライセンスが存在しない拡張プログラムであっても、一定時間、使用可能な状態になってしまうことがある。一方で、ポーリング間隔を極端に短くすると、画像形成装置全体の負荷が高くなり、他の動作のパフォーマンス劣化を招いてしまう。
【０００８】
拡張プログラムの起動をポーリングに依存せず、ライセンス監視インスタンスに検知させるために、拡張プログラム側から起動を監視プログラムに通知するように構成することも可能である。しかしながら、この場合には、拡張プログラム本体に専用の処理が必要になるため、拡張プログラムとは別のインスタンスでライセンスの状態を監視するメリットが減ってしまう。
【０００９】
本発明は、上記の問題に鑑みてなされたものであり、拡張プログラム（配信プログラム）本体に専用の処理を追加せずに、有効なライセンスが存在しない拡張プログラムの起動を防止することができる画像形成装置を提供することを目的とする。
【課題を解決するための手段】
【００１０】
上記課題を解決するために、本発明の画像形成装置は、ライセンス管理されたアプリケーションを実行可能な画像形成装置であって、前記ライセンス管理されたアプリケーションのライセンスの状態を監視する監視ソフトウェアと、前記ライセンス管理されたアプリケーションの起動時に参照するパッケージを書き込んで前記監視ソフトウェアを更新する第１更新手段と、起動時に前記パッケージを参照するように前記ライセンス管理されたアプリケーションを更新する第２更新手段とを備え、前記起動手段は、前記監視ソフトウェアに前記パッケージが含まれる場合、前記アプリケーションを起動し、前記監視ソフトウェアに前記パッケージが含まれない場合、前記アプリケーションを起動しないことを特徴とする。
【発明の効果】
【００１１】
本発明によれば、拡張プログラム（配信プログラム）本体に専用の処理を追加せずに、有効なライセンスが存在しない拡張プログラムの起動を防止することができる画像形成装置を提供することができる。
【図面の簡単な説明】
【００１２】
【図１】画像処理システムの構成を示す図である。
【図２】画像形成装置のハードウェア構成を示すブロック図である。
【図３】配信サーバのハードウェア構成示すブロック図である。
【図４】画像処理システムの処理の一例を示すシーケンス図である。
【図５】画像形成装置のソフトウェア構成を示すブロック図である。
【図６】配信サーバのソフトウェア構成を示すブロック図である。
【図７】配信プログラムとライセンスの取得処理を示すフローチャートである。
【図８】配信プログラムのインストールと起動処理を示すフローチャートである。
【図９】配信および監視プログラムのマニフェストファイルを示す図である。
【図１０】配信および監視プログラムのマニフェストファイルを示す図である。
【図１１】ライセンスの状態を定期的に監視する処理を示すフローチャートである。
【図１２】監視プログラムの更新後のマニフェストファイルを示す図である。
【図１３】配信プログラムを起動する処理を示すフローチャートである。
【図１４】監視プログラムを起動する処理を示すフローチャートである。
【図１５】監視プログラムを終了する処理を示すフローチャートである。
【図１６】監視プログラムのアンインストール時の処理のフローチャートである。
【図１７】画像形成装置のソフトウェア構成を示すブロック図である。
【図１８】ライセンスの状態を定期的に監視する処理を示すフローチャートである。
【図１９】配信プログラムとライセンスの取得処理を示すフローチャートである。
【図２０】配信プログラムのインストールと起動処理を示すフローチャートである。
【図２１】監視プログラムを起動する処理を示すフローチャートである。
【図２２】配信および監視プログラムのマニフェストファイルを示す図である。
【図２３】画像形成装置のエラーメッセージの一例を示す図である。
【発明を実施するための形態】
【００１３】
以下、本発明を実施するための形態について図面などを用いて説明する。
【００１４】
（第１実施形態）
まず、図１を参照して、本実施形態に係る画像処理システムにおけるＭＦＰ１０１と通信する、配信サーバ１０２について説明する。図１は、本実施形態に係る画像処理システムの構成を示す図である。図１に示すように、画像処理システムは、ＬＡＮ（Ｌｏｃａｌ  Ａｒｅａ  Ｎｅｔｗｏｒｋ）１１０を介して接続されるＭＦＰ１０１と、ＷＡＮ（Ｗｏｒｌｄ  Ａｒｅａ  Ｎｅｔｗｏｒｋ）１２０を介して接続される配信サーバ１０２から構成される。ＬＡＮ１１０上の装置とＷＡＮ１２０上の装置は、お互いのネットワークを介して、相互に通信可能である。本実施形態では、典型的なネットワーク構成を示し、各装置がＬＡＮ１１０またはＷＡＮ１２０のどちらにあってもよい。また、ネットワーク１２０は、インターネットや有線または無線などであってよく、これらに限定されない。
【００１５】
ＭＦＰ１０１は、スキャナ、プリンタ（レーザープリンタ、インクジェットプリンタ、サーマルプリンタ等）の機能を有する画像形成装置である。また、本実施形態のＭＦＰ１０１は、電子文書の印刷、出力内容のハードコピー、またはファクシミリ通信などの機能を有するが、これに限定することなく、他の機能を有してもよい。さらに、画像形成装置上で動作する拡張プログラムを追加し、拡張プログラムを実行可能させるためのアプリケーションプラットホームを備える。
【００１６】
配信サーバ１０２は、ＭＦＰ１０１で動作させる拡張プログラムなどを配信するための情報処理装置である。配信サーバ１０２は、拡張プログラムを管理し、ＭＦＰ１０１からの拡張プログラムの要求を受信すると、要求に応じて拡張プログラムのバンドルを特定し、拡張プログラム本体とライセンスファイルをＭＦＰ１０１へ配信する。
【００１７】
図２は、ＭＦＰ１０１のハードウェア構成を示すブロック図である。ＭＦＰ１０１は、制御部２１０と、操作部２１９と、プリンタ２２０と、スキャナ２２１とを備える。制御部２１０は、ＣＰＵ２１１と、ＲＯＭ２１２と、ＲＡＭ２１３と、ＨＤＤ２１４とを備える。また、操作部Ｉ／Ｆ２１５と、プリンタＩ／Ｆ２１６と、スキャナＩ／Ｆ２１７と、ネットワークＩ／Ｆ２１８とを含む。
【００１８】
ＣＰＵ（Ｃｅｎｔｒａｌ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ）２１１を含む制御部２１０は、ＭＦＰ１０１全体の動作を制御する。ＣＰＵ２１１は、ＲＯＭ（Ｒａｎｄｏｍ  Ｏｎｌｙ  Ｍｅｍｏｒｙ）２１２やＨＤＤ（Ｈａｒｄ  Ｄｉｓｋ  Ｄｒｉｖｅ）２１４に記憶された制御プログラムを読み出し、読取制御や送信制御などの各種制御処理を実行する。ＲＡＭ（Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ）２１３は、ＣＰＵ２１１の主メモリ、ワークエリア等の一時記憶領域として用いられる。ＨＤＤ２１４は、画像データや配信サーバ１０２から配信された拡張プログラムを含む各種プログラムを記憶する。
【００１９】
操作部Ｉ／Ｆ２１５は、操作部２１９と制御部２１０とを接続する。操作部２１９には、タッチパネル機能を有する液晶表示部やキーボード等のユーザが操作を入力する装置が備えられている。プリンタＩ／Ｆ２１６は、プリンタ２２０と制御部２１０とを接続するインターフェースである。プリンタ２２０で印刷する画像データは、プリンタＩ／Ｆ２１６を介して制御部２１０からプリンタ２２０に転送され、プリンタ２２０において記録媒体上に印刷される。スキャナＩ／Ｆ２１７は、スキャナ２２１と制御部２１０とを接続するインターフェースである。スキャナ２２１は、原稿上の画像を読み取って画像データを生成し、スキャナＩ／Ｆ２１７を介して制御部２１０に入力する。ネットワークＩ／Ｆ２１８は、制御部２１０（ＭＦＰ１０１）をＬＡＮ１１０に接続するインターフェースである。ＭＦＰ１０１は、ネットワークＩ／Ｆ２１８を用いて、ＬＡＮ１１０上またはＷＡＮ１２０上の他の装置との間で各種情報を送受信する。
【００２０】
図３は、配信サーバ１０２のハードウェア構成を示すブロック図である。配信サーバ１０２は、制御部３１０と、表示部３１８と、キーボード３１９とを備える。制御部３１０は、ＣＰＵ３１１と、ＲＯＭ３１２と、ＲＡＭ３１３と、ＨＤＤ３１４とを備える。また、表示部Ｉ／Ｆ３１５と、キーボードＩ／Ｆ３１６と、ネットワークＩ／Ｆ３１７とを備える。
【００２１】
ＣＰＵ３１１を含む制御部３１０は、配信サーバ１０２全体の動作を制御する。ＣＰＵ３１１は、ＲＯＭ３１２やＨＤＤ３１４に記憶された制御プログラムを読み出して、各種制御を実行する。ＲＡＭ３１３は、ＣＰＵ３１１の主メモリ、ワークエリア等の一時記憶領域として用いられる。ＨＤＤ３１４は、各種プログラムおよび配信対象の拡張プログラム（以下、配信プログラム）を記憶する。
【００２２】
表示部Ｉ／Ｆ３１５は、表示部３１８と制御部３１０を接続する。キーボードＩ／Ｆ３１６は、キーボード３１９と制御部３１０を接続する。ＣＰＵ３１１は、キーボード３１９を介したユーザからの指示を認識し、認識した指示に応じて、表示部３１８に表示する画面を遷移させる。本実施形態では、キーボードを使用して指示を認識しているが、これに限定することなく、ユーザが入力した操作を介した指示を認識できる装置であってよい。ネットワークＩ／Ｆ３１７は、制御部３１０（配信サーバ１０２）をＷＡＮ１２０に接続する。配信サーバ１０２は、ネットワークＩ／Ｆ３１７を用いて、ＬＡＮ１１０上またはＷＡＮ１２０上の他の装置との間で各種情報を送受信する。
【００２３】
図４（Ａ）は、本実施形態に係る配信プログラムの取得から、インストール、およびライセンス期限が切れるまでの処理を示すシーケンス図である。なお、本実施形態では、ＭＦＰ１０１に拡張プログラムを追加する仕組みとしてＯＳＧｉフレームワークを用いる。ここで、ＯＳＧｉフレームワーク上のＪａｖａ（登録商標）プログラムのことをＯＳＧｉバンドル（以下、バンドル）と呼ぶ。本実施形態では、個々の拡張プログラムは、独立したバンドルとして実現される。また、個々のバンドルが起動した状態を１つのインスタンスとみなす。
【００２４】
まず、ＭＦＰ１０１は、ユーザから配信プログラムのインストール指示を受け取ると（ステップＳ４０１）、配信サーバ１０２に対して、配信プログラムの取得指示を送信する（ステップＳ４０２）。配信サーバ１０２は、ＭＦＰ１０１から取得指示された配信プログラムのライセンスをライセンスファイルとして発行し（ステップＳ４０３）、配信プログラムとライセンスファイルをＭＦＰ１０１へ送信する（ステップＳ４０４）。
【００２５】
次に、ＭＦＰ１０１は、配信サーバ１０２から取得した配信プログラムのマニフェストファイルとライセンス監視プログラムのマニフェストファイルを更新し、配信プログラムを監視プログラムのパッケージに依存させる（ステップＳ４０５）。ライセンス監視プログラム（以下、監視プログラム）は、ライセンスを監視するためのプログラムであり、ＭＦＰ１０１のアプリケーションプラットホームで動作する。本実施形態では、監視プログラムを持たないＭＦＰ１０１に対して、出荷後にファームウェアの改変なしにライセンス監視の機能を追加できるように、監視プログラムは、拡張プログラムとして提供されることを前提とする。
【００２６】
ここで、ＯＳＧｉでは、マニフェストファイルでパッケージを公開するように宣言することで、別のバンドルからパッケージを参照することが可能になる。パッケージとは、バンドルを構成する部品の単位であり、公開されたパッケージを使用するバンドルは、マニフェストファイルにパッケージを参照するように宣言することで、別のバンドルで公開されているパッケージを使用することが可能になる。パッケージを公開しているバンドルをバンドルＡ、公開しているパッケージを使用するバンドルをバンドルＢとした場合、「バンドルＢは、バンドルＡ（またはバンドルＡのパッケージ）に依存する」と呼ぶ。
【００２７】
依存するパッケージがアプリケーションプラットホーム上で公開されていない場合、配信プログラムのマニフェストファイルは、依存するパッケージを参照することができないため、配信プログラムを起動できない。本実施形態では、配信プログラム毎に起動時に必要な専用のパッケージが定義され、監視プログラムがその専用パッケージを公開する。次に、配信プログラムが、監視プログラムの公開するパッケージが起動に必要であること宣言することにより、配信プログラムを監視プログラムに依存させる。
【００２８】
次に、ＭＦＰ１０１は、監視プログラムに依存するようにマニフェストファイルを更新した配信プログラムを、ライセンスファイルを用いて自装置へインストールし、配信プログラムを起動させる（ステップＳ４０６）。そして、ＭＦＰ１０１は、定期的に、インストールした配信プログラムのライセンスが有効か否かを判定する（ステップＳ４０７）。配信プログラムのライセンスが有効である場合（ＹＥＳ）、ライセンスが有効でないと判定されるまで、ステップＳ４０７の判定を続ける。一方、配信プログラムのライセンスが有効でない場合（ＮＯ）、その配信プログラムを終了させる（ステップＳ４０８）。そして、ＭＦＰ１０１は、監視プログラムのマニフェストファイルを更新し、配信プログラムが依存関係を解決できない状態にする（ステップＳ４０９）。具体的には、監視プログラムのマニフェストファイルから、ステップＳ４０５で公開したパッケージの宣言を削除することにより、配信プログラムが依存するパッケージを参照できない状態にする。
【００２９】
図４（Ｂ）は、本実施形態に係る配信プログラムの起動時の処理を示すシーケンス図である。ＭＦＰ１０１は、ユーザから配信プログラムの起動指示を受け取ると（ステップＳ４１０）、配信プログラムの依存関係が解決できるか否かを判定する（ステップＳ４１１）。依存関係が解決できる場合（ＹＥＳ）、ＭＦＰ１０１は、配信プログラムを起動させる（ステップＳ４１２）。一方、依存関係が解決できない場合（ＮＯ）には、ＭＦＰ１０１は、ユーザに対して配信プログラムが起動できない旨のエラーメッセージを通知する（ステップＳ４１３）。
【００３０】
図５は、本実施形態に係るＭＦＰ１０１のソフトウェアの構成を示すブロック図である。ＭＦＰ１０１は、拡張プログラム管理部５１０と、配信プログラム処理部５２０と、監視プログラムＡ５３０と、監視プログラムＢ５４０と、配信プログラムＸ５５０と、配信プログラムＹ５６０とを備える。
【００３１】
拡張プログラム管理部５１０は、ＭＦＰ１０１上で拡張プログラムを動作させるためのアプリケーションプラットホームである。配信プログラム処理部５２０は、配信プログラムを処理するためのバンドルであって、通信部５２１、ライフサイクル処理部５２２、マニフェスト処理部５２３、監視プログラム保持部５２４を含む。配信プログラム処理部５２０は、１つのインスタンスとして動作する。通信部５２１は、配信サーバ１０２と通信して、配信サーバ１０２から配信プログラムとそのライセンスを受信する。ライフサイクル処理部５２２は、配信プログラムや監視プログラムのインストールの実行や、配信プログラムや監視プログラムの起動、終了の指示等を実行する。マニフェスト処理部５２３は、配信プログラムと監視プログラムのマニフェストファイルを更新する。監視プログラム保持部５２４は、監視プログラムのバンドルのコピー（以下、コピーバンドル）を保持する。
【００３２】
監視プログラムＡ５３０と監視プログラムＢ５４０は、共にライセンスを監視するプログラム（監視ソフトウェア）である。監視プログラムＡ５３０と監視プログラムＢ５４０は、それぞれ独立したバンドルであり、独立したインスタンスとして動作する。監視プログラムＡ５３０と監視プログラムＢ５４０は、マニフェストファイル以外は同一のプログラムであり、いずれか一方のみが稼働している状態を維持することでライセンス監視を継続して行う。
【００３３】
監視プログラムＡ５３０は、ライセンス確認部５３１と、ライフサイクル処理部５３２と、マニフェスト処理部５３３とを備える。ライセンス確認部５３１は、配信プログラムのライセンス状態を確認する。ライフサイクル処理部５３２は、配信プログラムや監視プログラムのインストールの実行や、配信プログラムや監視プログラムの起動、終了の指示等を実行する。マニフェスト処理部５３３は、監視プログラムのマニフェストファイルを更新する。なお、監視プログラムＢ５４０は、監視プログラムＡ５３０と同様の構成であるため、内部の詳細な説明は省略する。
【００３４】
配信プログラムＸ５５０は、配信サーバ１０２から配信された拡張プログラム（バンドル）であり、ひとつの独立したインスタンスとして動作する。配信プログラムＹ５６０は、配信プログラムＸ５５０とは別の配信プログラム（バンドル）であり、ひとつの独立したインスタンスとして動作する。本実施形態ではＭＦＰ１０１に、配信プログラム（ライセンス管理されたアプリケーション）が２つある例を記載しているが、配信プログラムの個数は２つに限定されるものではなく、配信サーバ１０２から配信プログラムを取得することで増やしてもよい。
【００３５】
図６は、本実施形態に係る配信サーバ１０２のソフトウェア構成図である。配信サーバ１０２は、配信プログラム管理部６１１と、ライセンス発行部６１２と、通信部６１３とを備える。後述の図７のステップＳ７５１〜ステップＳ７５４の処理は、ＣＰＵ３１１が配信サーバ１０２のＨＤＤ３１４に記憶されているプログラムをＲＡＭ３１３に読み出し、実行することにより実現される。
【００３６】
配信プログラム管理部６１１は、ＭＦＰ１０１に配信する拡張プログラムを管理する。ライセンス発行部６１２は、ＭＦＰ１０１に配信する拡張プログラムのライセンスをライセンスファイルとして発行する。通信部６１３は、ＭＦＰ１０１とネットワークを介した通信を行い、ＭＦＰ１０１に拡張プログラムとライセンスファイルを配信する。
【００３７】
図７および図８は、ＭＦＰ１０１が管理サーバ１０２から配信プログラムとそのライセンスを取得、インストールして、起動するまでの処理を説明するフローチャートである。また、図７および図８は、図４（Ａ）のシーケンス図におけるステップＳ４０１〜ステップＳ４０６の処理を実行するためのＭＦＰ１０１と配信サーバ１０２におけるフローチャートでもある。さらに、図７および図８のフローチャートの各ステップの処理は、ＣＰＵ２１１がＭＦＰ１０１のＨＤＤ２１４に記憶されているプログラムをＲＡＭ２１３に読み出し、実行することにより実現される。図７のフローチャートのステップＳ７５１〜ステップＳ７５４の各ステップの処理は、ＣＰＵ３１１が配信サーバ１０２のＨＤＤ３１４に記憶されているプログラムをＲＡＭ３１３に読み出し、実行することにより実現される。
【００３８】
まず、配信プログラム処理部５２０は、ユーザから配信プログラムのインストール要求を受け取る（ステップＳ７０１）。次に、通信部５２１は、ユーザから指示された配信プログラムとそのライセンスの取得指示を、配信サーバ１０２に通知する（ステップＳ７０２）。そして、配信サーバ１０２において、通信部６１３は、配信プログラムとそのライセンスの取得指示を受け付ける（ステップＳ７５１）。次に、配信プログラム管理部６１１は、管理している配信プログラムの中から、ＭＦＰ１０１に送るためのバンドル（ＭＦＰ１０１から取得指示された配信プログラムのバンドル）を特定する（ステップＳ７５２）。次に、ライセンス発行部６１２は、取得指示された配信プログラムを使用するためのライセンスファイルを発行する（ステップＳ７５３）。そして、通信部６１３は、ステップＳ７５２で特定した配信プログラムとステップＳ７５３で発行したライセンスファイルをＭＦＰ１０１に送信する（ステップＳ７５４）。
【００３９】
次に、ＭＦＰ１０１の通信部５２１は、配信サーバ１０２から送信された配信プログラムとライセンスファイルを受信する（ステップＳ７０３）。次に、マニフェスト処理部５２３は、配信プログラム毎に起動時に使用する専用のパッケージを２つ決定する（ステップＳ７０４）。そして、監視プログラムＡ５３０と監視プログラムＢ５４０は、決定したパッケージを公開し、配信プログラムは、そのパッケージを参照して起動する。なお、パッケージは、プログラムの実行部品として使われることはなく、マニフェストファイルに記載するためだけに使われるため、実在するパッケージでなくてもよい。そのため、本実施形態では、パッケージの名前は、配信プログラムと監視プログラムＡ５３０、監視プログラムＢ５４０の名前を基に動的に生成される。
【００４０】
次に、ＭＦＰ１０１のマニフェスト処理部５２３は、監視プログラムＡ５３０と監視プログラムＢ５４０がステップＳ７０４で決定したパッケージをそれぞれ１つずつ公開するようにマニフェストファイルを更新する（ステップＳ７０５）。このとき、マニフェスト処理部５２３は、監視プログラムＡ５３０とＢ５４０のマニフェストファイルを直接更新するのではなく、監視プログラム保持部５２４が保持している監視プログラムＡ５３０とＢ５４０のコピーバンドルのマニフェストファイルを更新する。次に、マニフェスト処理部５２３は、受信した配信プログラムが、ステップＳ７０４で決定した２つのパッケージに依存するように、受信した配信プログラムのマニフェストファイルを更新する（ステップＳ７０６）。このように、図７のステップＳ７０５、ステップＳ７０６を実行することで、各プログラムのマニフェストファイルが更新され、受信した配信プログラムが監視プログラムＡ５３０、監視プログラムＢ５４０に依存するようになる。
【００４１】
ここで、図９および図１０を参照して、配信プログラムと監視プログラムのマニフェストファイルの一例を説明する。図９は、ＭＦＰ１０１が、配信プログラムＸ５５０をインストールした後に、配信プログラムＹ５６０を受信した状態（図７のステップＳ７０３を実行した直後）における各プログラムのマニフェストファイルを示す図である。
【００４２】
図９（Ａ）は、監視プログラムＡ５３０のマニフェストファイル８１０を示す図である。Ａｐｐｌｉｃａｔｉｏｎ−Ｉｄ８１１は、プログラムを一意に識別するためのＩＤを定義する項目であり、本実施形態では、監視プログラムＡのＩＤが定義されている。Ｂｕｎｄｌｅ−Ｎａｍｅ８１２は、バンドルの名前を定義する項目であり、本実施形態では、監視プログラムＡ５３０の名前が定義されている。Ｂｕｎｄｌｅ−Ｖｅｒｓｉｏｎ８１３は、バンドルのバージョンを定義する項目であり、本実施形態では、監視プログラムＡ５３０のバージョンが定義されている。Ｅｘｐｏｒｔ−Ｐａｃｋａｇｅ８１４は、公開するパッケージを定義する項目であり、本実施形態では、公開するパッケージとして「ｌｉｃｅｎｓｅ＿ｏｂｓｅｒｖｅｒ＿ａ＿ａｐｐ＿ｘ」が定義されている。なお、「ｌｉｃｅｎｓｅ＿ｏｂｓｅｒｖｅｒ＿ａ＿ａｐｐ＿ｘ」は、配信プログラムＸ５５０が参照するために定義されているパッケージである。Ｃｈｅｃｋ−Ａｐｐ−Ｉｄ８１５は、公開しているパッケージに依存するプログラムのＩＤを定義する項目である。本実施形態では、「ｌｉｃｅｎｓｅ＿ｏｂｓｅｒｖｅｒ＿ａ＿ａｐｐ＿ｘ」に依存しているプログラムのＩＤとして、配信プログラムＸ５５０のＩＤが定義されている。なお、配信プログラムＸ５５０のＩＤは、後述する図９（Ｃ）のＡｐｐｌｉｃａｔｉｏｎ−Ｉｄ８３１で定義される。
【００４３】
図９（Ｂ）は、監視プログラムＢ５４０のマニフェストファイル８２０を示す図である。Ａｐｐｌｉｃａｔｉｏｎ−Ｉｄ８２１の項目には、監視プログラムＢ５４０のＩＤが定義されている。Ｂｕｎｄｌｅ−Ｎａｍｅ８２２の項目には、監視プログラムＢ５４０の名前が定義されている。Ｂｕｎｄｌｅ−Ｖｅｒｓｉｏｎ８２３の項目には、監視プログラムＢ５４０のバージョンが定義されている。Ｅｘｐｏｒｔ−Ｐａｃｋａｇｅ８２４の項目には、公開するパッケージとして「ｌｉｃｅｎｓｅ＿ｏｂｓｅｒｖｅｒ＿ｂ＿ａｐｐ＿ｘ」が定義されている。なお、「ｌｉｃｅｎｓｅ＿ｏｂｓｅｒｖｅｒ＿ｂ＿ａｐｐ＿ｘ」は、配信プログラムＸ５５０が参照するために定義されている別のパッケージである。Ｃｈｅｃｋ−Ａｐｐ−Ｉｄ８２５の項目には、「ｌｉｃｅｎｓｅ＿ｏｂｓｅｒｖｅｒ＿ｂ＿ａｐｐ＿ｘ」に依存するプログラムのＩＤとして、配信プログラムＸ５５０のＩＤが定義されている。
【００４４】
図９（Ｃ）は、配信プログラムＸ５５０のマニフェストファイル８３０を示す図である。Ａｐｐｌｉｃａｔｉｏｎ−Ｉｄ８３１の項目には、配信プログラムＸ５５０のＩＤが定義されている。Ｂｕｎｄｌｅ−Ｎａｍｅ８３２の項目には、配信プログラムＸ５５０の名前が定義されている。Ｂｕｎｄｌｅ−Ｖｅｒｓｉｏｎ８３３の項目には、配信プログラムＸ５５０のバージョンが定義されている。Ｉｍｐｏｒｔ−Ｐａｃｋａｇｅ８３４の項目は、参照するパッケージを定義する項目である。Ｉｍｐｏｒｔ−Ｐａｃｋａｇｅ８３４の項目には、参照するパッケージとして「ｌｉｃｅｎｓｅ＿ｏｂｓｅｒｖｅｒ＿ａ＿ａｐｐ＿ｘ」と「ｌｉｃｅｎｓｅ＿ｏｂｓｅｒｖｅｒ＿ｂ＿ａｐｐ＿ｘ」が定義されている。つまり、配信プログラムＸ５５０は、監視プログラムＡ５３０と監視プログラムＢ５４０が公開するパッケージに依存する。
【００４５】
図９（Ｄ）は、配信プログラムＹ５６０のマニフェストファイル８４０を示す図である。Ａｐｐｌｉｃａｔｉｏｎ−Ｉｄ８４１の項目には、配信プログラムＹ５６０のＩＤが定義されている。Ｂｕｎｄｌｅ−Ｎａｍｅ８４２の項目には、配信プログラムＹ５６０の名前が定義されている。Ｂｕｎｄｌｅ−Ｖｅｒｓｉｏｎ８４３の項目には、配信プログラムＹ５６０のバージョンが定義されている。Ｉｍｐｏｒｔ−Ｐａｃｋａｇｅ８４４の項目には、参照するパッケージが記載されてないことから、参照するパッケージが存在しないことを示している。参照するパッケージが存在しない場合、Ｅｘｐｏｒｔ−Ｐａｃｋａｇｅの記載は省略してもよい。つまり、配信サーバ１０２から、配信プログラムＹ５６０を受信した時点では、配信プログラムＹ５６０は、監視プログラムＡ５３０と監視プログラムＢ５４０が公開するパッケージに依存していない。
【００４６】
図１０は、図９の状態から、各プログラムのマニフェストファイルを更新する処理（図７のステップＳ７０４〜ステップＳ７０６）を実行した状態における、各プログラムのマニフェストファイルを示す図である。なお、本実施形態では、パッケージを決定する処理（ステップＳ７０４）で、配信プログラムＹ５６０が参照するために使用する２つのパッケージが定義されているものとする。すなわち、「ｌｉｃｅｎｓｅ＿ｏｂｓｅｒｖｅｒ＿ａ＿ａｐｐ＿ｙ」と「ｌｉｃｅｎｓｅ＿ｏｂｓｅｒｖｅｒ＿ｂ＿ａｐｐ＿ｙ」というパッケージが定義されるものとする。
【００４７】
以下、図１０の説明では図９に示すマニフェストファイルから変更のある箇所のみを説明する。図１０（Ａ）は、監視プログラムのマニフェストファイルを更新する処理（ステップＳ７０５）を実行した後の監視プログラムＡ５３０のコピーバンドルのマニフェストファイル９１０を示す図である。Ｅｘｐｏｒｔ−Ｐａｃｋａｇｅ９１４の項目には、公開するパッケージとして「ｌｉｃｅｎｓｅ＿ｏｂｓｅｒｖｅｒ＿ａ＿ａｐｐ＿ｙ」が追加されている。また、Ｃｈｅｃｋ−Ａｐｐ−Ｉｄ９１５の項目には、「ｌｉｃｅｎｓｅ＿ｏｂｓｅｒｖｅｒ＿ａ＿ａｐｐ＿ｙ」に依存するプログラムのＩＤとして、配信プログラムＹ５６０のＩＤが追加されている。
【００４８】
図１０（Ｂ）は、監視プログラムのマニフェストファイルを更新する処理（ステップＳ７０５）を実行した後の監視プログラムＢ５４０のコピーバンドルのマニフェストファイル９２０を示す図である。Ｅｘｐｏｒｔ−Ｐａｃｋａｇｅ９２４の項目には、公開するパッケージとして「ｌｉｃｅｎｓｅ＿ｏｂｓｅｒｖｅｒ＿ｂ＿ａｐｐ＿ｙ」が追加されている。また、Ｃｈｅｃｋ−Ａｐｐ−Ｉｄ９２５の項目には、「ｌｉｃｅｎｓｅ＿ｏｂｓｅｒｖｅｒ＿ｂ＿ａｐｐ＿ｙ」に依存するプログラムのＩＤとして、配信プログラムＹ５６０のＩＤが追加されている。
【００４９】
図１０（Ｃ）は、配信プログラムのマニフェストファイルを更新する処理（ステップＳ７０６）を実行した後の配信プログラムＹ５６０のマニフェストファイル９４０を示す図である。Ｉｍｐｏｒｔ−Ｐａｃｋａｇｅ９４４の項目には、配信プログラムＹ５６０が参照するパッケージとして「ｌｉｃｅｎｓｅ＿ｏｂｓｅｒｖｅｒ＿ａ＿ａｐｐ＿ｙ」と「ｌｉｃｅｎｓｅ＿ｏｂｓｅｒｖｅｒ＿ｂ＿ａｐｐ＿ｙ」が追加されている。つまり、マニフェスト処理部５２３が図７のステップＳ７０４〜ステップＳ７０６を実行することで、配信プログラムＹ５６０は、監視プログラムＡ５３０と監視プログラムＢ５４０が公開するパッケージに依存するようになる。
【００５０】
ここで、図８の処理に戻って、ライフサイクル処理部５２２は、監視プログラムＡ５３０の状態を判定する（ステップＳ７０７）。監視プログラムＡ５３０が稼働している場合（稼働状態）、ライフサイクル処理部５２２は、監視プログラムＡ５３０を終了し（ステップＳ７０８）、ステップＳ７０９に移行する。次に、監視プログラムＡ５３０が停止している場合（停止状態）、ステップＳ７０９に移行する。ライフサイクル処理部５２２は、監視プログラムＡ５３０をコピーバンドルで更新する（ステップＳ７０９）。そして、監視プログラムＡ５３０が存在しない場合、ライフサイクル処理部５２２は、監視プログラムＡ５３０のコピーバンドルをインストールする（ステップＳ７１０）。
【００５１】
次に、ライフサイクル処理部５２２は、監視プログラムＡ５３０を起動する（ステップＳ７１１）。そして、ライフサイクル処理部５２２は、監視プログラムＢ５４０の状態を判定する（ステップＳ７１２）。監視プログラムＢ５４０が稼働している場合（稼働状態）、ライフサイクル処理部５２２は、監視プログラムＢ５４０を終了し（ステップＳ７１３）、ステップＳ７１４に移行する。また、監視プログラムＢ５４０が停止している場合（停止状態）、ステップＳ７１４へ移行する。そして、ライフサイクル処理部５２２は、監視プログラムＢ５４０をコピーバンドルで更新する（ステップＳ７１４）。監視プログラムＢ５４０が存在しない場合、ライフサイクル処理部５２２は、監視プログラムＢ５４０のコピーバンドルをインストールする（ステップＳ７１５）。
【００５２】
次に、ライフサイクル処理部５２２は、ステップＳ７０６でマニフェストファイルを更新した配信プログラムを、配信サーバ１０２より受け取ったライセンスファイルを用いてインストール（ステップＳ７１６）する。そして、起動させて（ステップＳ７１７）、処理を終了する。
【００５３】
図１１は、監視プログラムＡ５３０または監視プログラムＢ５４０が、配信プログラムのライセンスの状態を定期的に監視する処理を示すフローチャートである。本実施形態では、２つある監視プログラムは、どちらか一方が稼働状態、もう一方が停止状態となるように構成されている。そのため、図１１に示す処理は、いずれか一方の監視プログラムのみで実行され、２つの監視プログラムで同時に実行されることはない。また、図１１は、図４（Ａ）のシーケンス図におけるステップＳ４０７〜ステップＳ４０９の処理に相当するフローチャートでもある。図１１のフローチャートの各ステップの処理は、ＣＰＵ２１１がＭＦＰ１０１のＨＤＤ２１４に記憶されているプログラムをＲＡＭ２１３に読み出し、実行することにより実現される。
【００５４】
まず、ライセンス確認部５３１は、監視プログラムのマニフェストファイルのＣｈｅｃｋ−Ａｐｐ−Ｉｄの項目で定義される配信プログラムのライセンスが有効か否かを判定する（ステップＳ１００１）。例えば、本実施形態では、図１０（Ａ）のＣｈｅｃｋ−Ａｐｐ−Ｉｄ９１５の項目には、配信プログラムＸ５５０と配信プログラムＹ５６０のＩＤが定義されている。そのため、ライセンス確認部５３１は、配信プログラムＸ５５０と配信プログラムＹ５６０のライセンスが有効であると判定することができる。配信プログラムのライセンスが有効である場合（ＹＥＳ）、ライセンスが有効でなくなるまで、定期的にステップＳ１００１の判定を続ける。一方、配信プログラムのライセンスが有効でない場合（ＮＯ）、ライフサイクル処理部５３２は、ライセンスが有効でない配信プログラムが稼働しているか否かを判定する（ステップＳ１００２）。ライセンスが有効でない（無効になった）配信プログラムが稼働している場合（ＹＥＳ）、ライフサイクル処理部５３２は配信プログラムを終了させ（ステップＳ１００３）、ステップＳ１００４へ移行する。一方、ライセンスが有効でない配信プログラムが稼働していない場合（ＮＯ）、ステップＳ１００４へ移行する。
【００５５】
次に、マニフェスト処理部５３３は、稼動していないもう一方の監視プログラム（例えば監視プログラムＡ５３０が稼働している場合は、監視プログラムＢ５４０）のコピーバンドルのマニフェストファイルを更新する（ステップＳ１００４）。具体的には、マニフェスト処理部５３３は、監視プログラムのマニフェストファイルのＥｘｐｏｒｔ−Ｐａｃｋａｇｅの項目から、配信プログラムが依存しているパッケージの記載を削除する。同時に、監視プログラムのＣｈｅｃｋ−Ａｐｐ−Ｉｄの項目から、配信プログラムが依存しているパッケージと配信プログラムのＩＤの記載を削除する。そして、ライフサイクル処理部５３２は、マニフェストファイルを更新したコピーバンドルでもう一方の監視プログラムを更新（ステップＳ１００５）し、更新したもう一方の監視プログラムを起動させる（ステップＳ１００６）。なお、監視プログラムの起動時の処理は、後述する図１４にて説明する。
【００５６】
図１２は、配信プログラムＸ５５０のライセンス期限が切れて、配信プログラムＸ５５０が有効なライセンスを持たなくなった状況で、図１１の処理が実行された場合の監視プログラムのマニフェストファイルを示す図である。以下、図１２では、図１０から変更のある箇所のみを説明する。
【００５７】
図１２（Ａ）は、図１１の処理を実行した後の監視プログラムＡ５３０のマニフェストファイル１１１０を示す図である。図１０（Ａ）のマニフェストファイル９１０からの違いとして、Ｅｘｐｏｒｔ−Ｐａｃｋａｇｅ１１１４の項目から、公開するパッケージ「ｌｉｃｅｎｓｅ＿ｏｂｓｅｒｖｅｒ＿ａ＿ａｐｐ＿ｘ」が削除されている。また、Ｃｈｅｃｋ−Ａｐｐ−Ｉｄ１１１５の項目から、「ｌｉｃｅｎｓｅ＿ｏｂｓｅｒｖｅｒ＿ａ＿ａｐｐ＿ｘ」が削除されている。
【００５８】
図１２（Ｂ）は、図１１の処理実行した後の監視プログラムＢ５４０のマニフェストファイル１１２０を示す図である。図１０（Ｂ）のマニフェストファイル９２０からの違いとして、Ｅｘｐｏｒｔ−Ｐａｃｋａｇｅ１１２４の項目から、公開するパッケージ「ｌｉｃｅｎｓｅ＿ｏｂｓｅｒｖｅｒ＿ｂ＿ａｐｐ＿ｘ」が削除されている。また、Ｃｈｅｃｋ−Ａｐｐ−Ｉｄ１１２５の項目から、「ｌｉｃｅｎｓｅ＿ｏｂｓｅｒｖｅｒ＿ｂ＿ａｐｐ＿ｘ」が削除されている。
【００５９】
つまり、図１１の処理を実行することにより、配信プログラムＸ５５０の依存するパッケージが、監視プログラムＡ５３０と監視プログラムＢ５４０で公開されなくなるため、配信プログラムＸ５５０がパッケージを参照できなくなる。従って、依存関係が解決できない状態（すなわち、配信プログラムＸを起動することができない状態）になる。
【００６０】
図１３は、配信プログラムが起動する場合の処理を示すフローチャートである。また、図１３は、図４（Ｂ）に示すシーケンス図を処理するためのフローチャートでもある。図１３に示すフローチャートの処理は、ＣＰＵ２１１がＭＦＰ１０１のＨＤＤ２１４に記憶されているプログラムをＲＡＭ２１３に読み出し、実行することにより実現される。
【００６１】
まず、拡張プログラム管理部５１０は、ユーザからの配信プログラムの起動指示を検知（ステップＳ１２０１）すると、配信プログラムの依存関係が解決できるか否かを判定する（ステップＳ１２０２）。ここで、「依存関係が解決できる」とは、「マニフェストファイルで参照すると宣言したパッケージが、アプリケーションプラットホーム上に公開されている」状態（すなわち、配信プログラムを起動できる状態）である。このとき、パッケージを公開すると宣言したバンドルが稼働中である必要はない。すなわち、パッケージを公開すると宣言したバンドルが停止状態であっても、依存関係は解決できる。
【００６２】
そして、拡張プログラム管理部５１０は、依存関係が解決できる場合（ＹＥＳ）、配信プログラムを起動させる（ステップＳ１２０３）。一方、依存関係が解決できない場合（ＮＯ）、ユーザに対して配信プログラムが起動できない旨のエラーメッセージを通知する（ステップＳ１２０４）。このとき、エラーメッセージには参照できないパッケージの名前等のパッケージ情報が記載される。
【００６３】
図１４は、監視プログラムの起動時の処理を説明するフローチャートであり、図１１のステップＳ１００６における処理の詳細を示す。図１４に示すフローチャートの処理は、ＣＰＵ２１１がＭＦＰ１０１のＨＤＤ２１４に記憶されているプログラムをＲＡＭ２１３に読み出し、実行することにより実現される。
【００６４】
ライフサイクル処理部５３２は、いずれか一方の監視プログラムの起動イベントを検知（ステップＳ１３０１）する。次に、もう一方の監視プログラム（例えば、監視プログラムＡ５３０の起動イベントの場合は、監視プログラムＢ５４０）が稼働しているか否かを判定する（ステップＳ１３０２）。もう一方の監視プログラム（監視プログラムＢ５４０）が稼働している場合（ＹＥＳ）、ライフサイクル処理部５３２は、稼働しているもう一方の監視プログラムを終了させる（ステップＳ１３０３）。一方、もう一方の監視プログラム（監視プログラムＢ５４０）が稼働していない場合（ＮＯ）、処理を終了する。図１４に示すフローチャートの処理を実行することで、２つの監視プログラムが同時に稼働状態になることを防いでいる。
【００６５】
図１５は、監視プログラムの終了時の処理を説明するフローチャートである。図１５に示すフローチャートの処理は、ＣＰＵ２１１がＭＦＰ１０１のＨＤＤ２１４に記憶されているプログラムをＲＡＭ２１３に読み出し、実行することにより実現される。
【００６６】
まず、ライフサイクル処理部５３２は、いずれか一方の監視プログラムの終了イベントを検知（ステップＳ１４０１）すると、ユーザの指示による終了イベントか否かを判定する（ステップＳ１４０２）。ユーザの指示による終了イベントではない場合（ＮＯ）、以下のステップへ進まず、処理を終了する。一方、ユーザの指示による終了イベントの場合（ＹＥＳ）、ライフサイクル処理部５３２は、もう一方の監視プログラム（例えば、監視プログラムＡ５３０の終了イベントの場合は、監視プログラムＢ５４０）が停止しているか否かを判定する（ステップＳ１４０３）。もう一方の監視プログラム（監視プログラムＢ５４０）が停止している場合（ＹＥＳ）、ライフサイクル処理部５３２は、停止しているもう一方の監視プログラムを起動させる（ステップＳ１４０４）。一方、もう一方の監視プログラム（監視プログラムＢ５４０）が停止していない場合（ＮＯ）、終了イベントの処理を終了する。図１５に示すフローチャートの各処理を実行することで、２つの監視プログラムが同時に停止状態になることを防いでいる。
【００６７】
図１６は、監視プログラムがアンインストールされた場合の処理を説明するフローチャートである。図１６に示すフローチャートの処理は、ＣＰＵ２１１がＭＦＰ１０１のＨＤＤ２１４に記憶されているプログラムをＲＡＭ２１３に読み出し、実行することにより実現される。まず、拡張プログラム管理部５１０は、監視プログラムのアンインストールを検知（ステップＳ１５０１）すると、監視プログラムをアンインストールすることにより依存関係を解決できない配信プログラムを検出する（ステップＳ１５０２）。すなわち、アンインストールの対象の監視プログラムのパッケージを参照する配信プログラムを検出する。次に、拡張プログラム管理部５１０は、検出した配信プログラムを終了させる（ステップＳ１５０３）。そして、処理を終了する。
【００６８】
以上、本実施形態によれば、有効なライセンスが存在しない配信プログラムの起動を防止することができる。さらに、ユーザによる監視プログラムの停止、アンインストールが行われた場合でも、有効なライセンスが存在しない配信プログラムの起動を防止することができる。
【００６９】
（第２実施形態）
次に、第２実施形態について説明する。第１実施形態では、２つの監視プログラムについて、マニフェストファイル以外は同一のプログラムであり、どちらか一方が稼働している状態を維持することで、ライセンス監視を継続して行った。これに対して、第２実施形態では、一方の監視プログラムが別の機能（役割）を有する場合について説明する。一方の監視プログラムが別の機能を有することで、監視プログラム専用のバンドルを２つから１つに減らすことができる。
【００７０】
第２実施形態では、新しく配信される拡張プログラム（配信プログラム）をユーザに紹介するための機能である新着プログラム紹介機能を有するプログラムに、監視プログラムの機能を追加した例について説明する。第１実施形態では、２つの監視プログラムのうち、配信プログラムを監視するため、必ずどちらか一方が稼働している。第２実施形態では、新着プログラム紹介機能を処理するため、新着プログラム紹介機能を有する監視プログラムを優先的に稼働させる必要がある。
【００７１】
第２実施形態は、第１実施形態を一部変更したものであるため、第１実施形態と異なる部分のみについて説明する。図１７は、図５に示すソフトウェア構成に対応する、ＭＦＰ１０１のソフトウェア構成を示すブロック図である。監視プログラムＡ１６１０は、監視プログラムＡ５３０に新着プログラム紹介部（補助ソフトウェア）１６１１が追加されたプログラムである。新着プログラム紹介部１６１１は、新しく配信される拡張プログラム（配信プログラム）をユーザに紹介する機能を有する。監視プログラムＢ１６２０は、ライフサイクル処理部１６２１のみを備える。また、監視プログラムＢ１６２０は、第１実施形態の監視プログラムとは異なり、ライセンス確認部やマニフェスト処理部を備えていない。
【００７２】
図１８は、図１１に示す配信プログラムのライセンスの状態を定期的に監視する処理のフローチャートに対応するフローチャートである。図１１に示すフローチャートでは、監視プログラムＡ５３０または監視プログラムＢ５４０のどちらか一方が配信プログラムの監視を実行する。これに対して、図１８に示すフローチャートでは、監視プログラムＡ１６１０のみが配信プログラムの監視を行う。具体的には、図１１の示すフローチャートでは、ステップＳ１００６の処理で、もう一方の監視プログラムを起動させ、起動した監視プログラムは、図１３に示す起動時の処理を実行することで、稼働する監視プログラムが入れ替わる。これに対して、図１８の示すフローチャートでは、ステップＳ１００６の処理を実行しないため、監視プログラムＢ１６２０は、起動せず、監視プログラムＡ１６１０が稼働している状態を維持する。
【００７３】
第２実施形態では、監視プログラムＡ１６１０が、図１８に示す配信プログラムのライセンスの状態を定期的に監視する処理を実行する。そのため、監視プログラムＢ１６２０は、配信プログラムのライセンス確認の処理を実行しないため、配信プログラムのライセンスが切れている場合（すなわち、ライセンスが無効の場合）、監視プログラムＡ１６１０のマニフェストファイルが更新されない。しかしながら、監視プログラムＢ１６２０のマニフェストは更新されているため、配信プログラムは、依存関係を解決できず、起動することができない。よって、有効なライセンスが存在しない配信プログラムの起動を防止することができる。
【００７４】
図１９図および２０は、図７および図８に対応するフローチャートである。図１９に示すフローチャートでは、図７で説明したフローチャートのステップＳ７０５を、ステップＳ１８０１に変更している。図１９のステップＳ１８０１では、マニフェスト処理部５２３は、図７のステップＳ７０５の処理に加え、さらに監視プログラムＡ１６１０のマニフェストファイルから余分なパッケージの記載を削除する。ここで、余分なパッケージとは、図１８に示すフローチャートの処理を実行することで、監視プログラムＢ１６２０から削除されたパッケージと対になるパッケージのことである。第１実施形態を例に説明すると、「ｌｉｃｅｎｓｅ＿ｏｂｓｅｒｖｅｒ＿ｂ＿ａｐｐ＿ｘ」と対になるパッケージは、「ｌｉｃｅｎｓｅ＿ｏｂｓｅｒｖｅｒ＿ａ＿ａｐｐ＿ｘ」である。図１８に示す処理では、監視プログラムＡ１６１０のマニフェストファイルが更新されないため、配信プログラムのインストール時に余分なパッケージの記載を削除することで、監視プログラムＡ１６１０のマニフェストファイルの肥大化を防いでいる。その他の処理については、図７および図８で説明した処理と同様のため、詳細な説明については省略する。
【００７５】
次に、図２１は、監視プログラムＢ１６２０の起動時の処理を示すフローチャートである。図２１に示すフローチャートの処理は、ＣＰＵ２１１がＭＦＰ１０１のＨＤＤ２１４に記憶されているプログラムをＲＡＭ２１３に読み出し、実行することにより実現される。なお、監視プログラムＡ１６１０の起動時の処理は、第１実施形態の図１４で説明した起動時の処理と同一である。
【００７６】
まず、ライフサイクル処理部１６２１は、監視プログラムＢ１６２０の起動イベントを検知（ステップＳ１９０１）すると、監視プログラムＡ１６１０が稼働しているか否かを判定する（ステップＳ１９０２）。監視プログラムＡ１６１０が稼働していない場合（ＮＯ）、ライフサイクル処理部１６２１は、監視プログラムＡ１６１０を起動させる（ステップＳ１９０３）。一方、監視プログラムＡ１６１０が稼働している場合（ＹＥＳ）、ステップＳ１９０４に進む。そして、ライフサイクル処理部１６２１は、監視プログラムＢ１６２０を終了させる（ステップＳ１９０４）。
【００７７】
以上、図２１の示す起動時の処理を実行することで、監視プログラムＡ１６１０は、稼働状態を維持し、監視プログラムＢ１６２０は、停止状態を維持している。なお、監視プログラムの終了時の処理については、監視プログラムＡ１６１０および監視プログラムＢ１６２０共に、図１５で説明した処理と同様の処理が実行される。具体的には、監視プログラムＡ１６１０を終了する場合、図１５に示す終了時の処理を実行することで監視プログラムＢ１６２０を起動させる。そして、図２１に示す起動時の処理を実行することで、監視プログラムＡ１６１０を起動させ、起動した監視プログラムＢ１６２０を終了する。
【００７８】
監視プログラムＢ１６２０を終了する場合、図１５に示す終了時の処理を実行することで監視プログラムＡ１６１０を起動させる。起動した監視プログラムＡ１６１０は、図１４に示す起動時の処理を実行するが、監視プログラムＢ１６２０は、稼働していないため、何も処理を実行しない。上記のいずれの場合についても、処理後は監視プログラムＡ１６１０が稼働し、監視プログラムＢ１６２０が停止状態のままとなる。
【００７９】
以上、本実施形態によれば、一方の監視プログラムが別の機能を有することで、監視プログラム専用のバンドルを２つから１つに減らすことができ、有効なライセンスが存在しない配信プログラムの起動を防止することができる。
【００８０】
（第３実施形態）
次に、第３実施形態について説明する。第１および第２実施形態では、配信プログラム毎に決定した２つのパッケージの名称は、ユーザに対しては意味の無い名前（名称）である。これに対して、第３実施形態では、配信プログラム毎に決めた２つのパッケージ名をユーザに対して意味のある名前（名称）にする。これにより、依存関係が解決できずに配信プログラムが起動しない場合、その配信プログラムの起動しない理由等をユーザに通知することができる。
【００８１】
第３実施形態は、第１実施形態を一部変更したものであるため、第１実施形態と異なる部分のみについて説明する。図２２は、第３実施形態における監視プログラムと配信プログラムのマニフェストファイルを示す図である。図２２は、図９に示す各プログラムのマニフェストファイルに対応する図であるため、図９と同様の符号については、説明を省略する。
【００８２】
図２２（Ａ）に示す監視プログラムＡのマニフェストファイル２０１０のＥｘｐｏｒｔ−Ｐａｃｋａｇｅ２０１１の項目には、監視プログラムＡが公開するパッケージとして、「ａｐｐ＿ｘ＿ｌｉｃｅｎｓｅ＿ｈａｓ＿ｅｘｐｉｒｅｄ＿ａ」が定義されている。また、Ｃｈｅｃｋ−Ａｐｐ−ＩＤ２０１２の項目には、「ａｐｐ＿ｘ＿ｌｉｃｅｎｓｅ＿ｈａｓ＿ｅｘｐｉｒｅｄ＿ａ」に依存しているプログラムのＩＤとして配信プログラムＸのＩＤが定義されている。
【００８３】
図２２（Ｂ）に示す監視プログラムＢのマニフェストファイル２０２０のＥｘｐｏｒｔ−Ｐａｃｋａｇｅ２０２１の項目には、監視プログラムＡが公開するパッケージとして「ａｐｐ＿ｘ＿ｌｉｃｅｎｓｅ＿ｈａｓ＿ｅｘｐｉｒｅｄ＿ｂ」が定義されている。また、Ｃｈｅｃｋ−Ａｐｐ−ＩＤ２０２２の項目には、「ａｐｐ＿ｘ＿ｌｉｃｅｎｓｅ＿ｈａｓ＿ｅｘｐｉｒｅｄ＿ｂ」に依存しているプログラムのＩＤとして配信プログラムＸのＩＤが定義されている。
【００８４】
図２２（Ｃ）に示す配信プログラムＸのマニフェストファイル２０３０のＩｍｐｏｒｔ−Ｐａｃｋａｇｅ２０３１の項目には、配信プログラムＸが参照するパッケージが定義されている。すなわち、「ａｐｐ＿ｘ＿ｌｉｃｅｎｓｅ＿ｈａｓ＿ｅｘｐｉｒｅｄ＿ａ」と「ａｐｐ＿ｘ＿ｌｉｃｅｎｓｅ＿ｈａｓ＿ｅｘｐｉｒｅｄ＿ｂ」が定義されている。
【００８５】
図２３は、配信プログラムの起動時に依存関係が解決できずに配信プログラムを起動できない場合に、ユーザに対して表示（通知）するエラーメッセージの一例を示す図である。エラーメッセージ２１００は、配信プログラムＸのラインセンスが期限切れになった後、図１３で説明した起動時の処理を実行した場合に、ステップＳ１２０４で表示されるエラーメッセージである。エラーメッセージ２１００には、ライセンスが無効になった配信プログラムの名称や配信プログラムの起動しない理由（参照できないパッケージの情報）等が記載されている。
【００８６】
以上、本実施形態によれば、配信プログラム毎に決めた２つのパッケージ名をユーザに対して意味のある名前（名称）にする。このようにすることで、依存関係が解決できずに配信プログラムを起動できない場合、配信プログラムが参照できないパッケージの情報等をユーザに通知することができる。これにより、有効なライセンスが存在しない配信プログラムの起動を防止しつつ、ユーザがその理由についても認識することができる。
【００８７】
（他の実施例）
本発明は、上述した実施形態を適宜組み合わせることにより構成された装置あるいはシステムやその方法も含まれるものとする。
ここで、本発明は、上述した実施形態の機能を実現する１以上のソフトウェア（プログラム）を実行する主体となる装置あるいはシステムである。また、その装置あるいはシステムで実行される上述した実施形態を実現するための方法も本発明の一つである。また、そのプログラムは、ネットワーク又は各種記憶媒体を介してシステム或いは装置に供給され、そのシステム或いは装置の１以上のコンピュータ（ＣＰＵやＭＰＵ等）によりそのプログラムが読み出され、実行される。つまり、本発明の一つとして、さらにそのプログラム自体、あるいは該プログラムを格納したコンピュータにより読み取り可能な各種記憶媒体も含むものとする。また、上述した実施形態の機能を実現する回路（例えば、ＡＳＩＣ）によっても、本発明は実現可能である。
【００８８】
また、本発明の好ましい実施形態について説明したが、本発明は、これらの実施形態に限定されず、その要旨の範囲内で種々の変形および変更が可能である。
【図１】
2016081278.tif 000003
【図２】
2016081278.tif 000004
【図３】
2016081278.tif 000005
【図４】
2016081278.tif 000006
【図５】
2016081278.tif 000007
【図６】
2016081278.tif 000008
【図７】
2016081278.tif 000009
【図８】
2016081278.tif 000010
【図９】
2016081278.tif 000011
【図１０】
2016081278.tif 000012
【図１１】
2016081278.tif 000013
【図１２】
2016081278.tif 000014
【図１３】
2016081278.tif 000015
【図１４】
2016081278.tif 000016
【図１５】
2016081278.tif 000017
【図１６】
2016081278.tif 000018
【図１７】
2016081278.tif 000019
【図１８】
2016081278.tif 000020
【図１９】
2016081278.tif 000021
【図２０】
2016081278.tif 000022
【図２１】
2016081278.tif 000023
【図２２】
2016081278.tif 000024
【図２３】
2016081278.tif 000025