以下に添付図面を参照して、情報処理プログラム、情報処理装置および情報処理方法の実施形態を詳細に説明する。
図1は、実施形態に適用可能なシステム構成の例を示す。図1において、ネットワークシステム1は、それぞれネットワーク2に接続されるクライアントコンピュータ(クライアントPC)10a、10b、…と、ファイルサーバ20とを含む。ネットワーク2は、画像形成装置21など他の情報機器がさらに接続されていてもよい。
各クライアントPC10a、10b、…は、所定のソフトウェアプログラムが共通に搭載されるものとする。以下、「ソフトウェアプログラム」を「ソフトウェア」と略称し、この、各クライアントPC10a、10b、…に共通して搭載される所定のソフトウェアを、特定ソフトウェアと呼ぶ。ファイルサーバ20は、各クライアントPC10a、10b、…に搭載される特定ソフトウェアの更新(アップデートインストール)を行うためのアップデートインストーラが配置される。なお、ソフトウェアの配置とは、ソフトウェアを構成する1以上のファイルを所定のフォルダに格納することをいう。また、アップデートインストーラは、UI表示などを行わないサイレントモードでの実行が可能とされている。
ここで、特定ソフトウェアに対応するアップデートインストーラは、例えば最新バージョンの特定ソフトウェアが同梱または内包される。より具体的には、特定ソフトウェアに対応するアップデートインストーラは、アップデートインストーラによるアップデートインストール処理を支援する、実施形態に係る支援ソフトウェア(詳細は後述する)を内包し、支援ソフトウェアは、特定ソフトウェアを内包する。アップデートインストーラが支援ソフトウェアに対するアップデートインストール処理を行うことで、特定ソフトウェアのアップデートインストール処理も行われる。また、アップデートインストーラおよび支援ソフトウェアは、バージョンを共通としている。
画像形成装置21は、プリント機能を有するプリンタ装置であってもよいし、プリント機能、スキャナ機能、コピー機能、FAX機能といった複数の機能を1台の筐体で実現した複合機であってもよい。例えば各クライアントPC10a、10b、…は、この画像形成装置21に対応するドライバプログラムがそれぞれ搭載される。各クライアントPC10a、10b、…は、搭載されるドライバプログラムにより、画像形成装置21の機能を利用することができる。
図2は、実施形態に適用可能なクライアントPC10a、10b、…のハードウェア構成の例を示す。なお、クライアントPC10a、10b、…は、同様の構成で実現可能であるため、以下では、特に記載の無い限り、クライアントPC10a、10b、…をクライアントPC10aで代表させて説明を行う。
図2において、クライアントPC10aは、CPU(Central Processing Unit)1000と、ROM(Read Only Memory)1001と、RAM(Random Access Memory)1002と、グラフィクスI/F(インタフェース)1003と、ストレージ1004と、データI/F1005と、通信I/F1006とを備え、これら各部がバス1010により互いに通信可能に接続される。
ストレージ1004は、データを不揮発に記憶する記憶媒体であって、ハードディスクドライブやフラッシュメモリを適用できる。ストレージ1004は、CPU1000が動作するためのプログラムやデータが記憶される。例えば上述した特定ソフトウェアを構成するプログラムは、このストレージ1004に記憶される。
CPU1000は、例えば、ROM1001やストレージ1004に予め記憶されたプログラムに従い、RAM1002をワークメモリとして用い、このクライアントPC10aの全体の動作を制御する。グラフィクスI/F1003は、CPU1000によりプログラムに従い生成された表示制御信号に基づき、ディスプレイ1007が対応可能な表示信号を生成する。ディスプレイ1007は、グラフィクスI/F1003から供給された表示信号に応じた画面を表示する。
データI/F1005は、外部の機器との間でデータの送受信を行う。データI/F1005としては、例えばUSB(Universal Serial Bus)を適用可能である。この例では、データI/F1005に、ユーザ入力を受け付ける入力デバイスとしてキーボード1008aおよびポインティングデバイス1008bが接続されている。通信I/F1006は、CPU1000の指示に従い、ネットワーク2に対する通信を制御する。
(既存技術によるアップデートインストール処理)
次に、理解を容易とするために、既存技術によるソフトウェアのアップデートインストール処理の例について、概略的に説明する。クライアントPC10aに既に搭載されているあるソフトウェア(対象ソフトウェアとする)を考える。一例として、対象ソフトウェアは、クライアントPC10a上で起動されると、ファイルサーバ20にアクセスし、自身のバージョンよりも新しいバージョンの対象ソフトウェアに対応するアップデートインストーラをファイルサーバ20から取得する。このアップデートインストーラは、当該新しいバージョンの対象ソフトウェアを内包しているものとする。
対象ソフトウェアは、取得したアップデートインストーラを起動させる。クライアントPC10aにおいて、アップデートインストーラは、同梱される新しいバージョンの対象ソフトウェアのアップデートインストール処理を実行する。
このアップデートインストーラによるアップデートインストール処理が、クライアントPC10aのOS(Operating System)に変更を加える場合がある。例えばパーソナルコンピュータ上で動作するOSの一つであるWindows(登録商標)では、レジストリと呼ばれる設定情報のデータベースを有し、アップデートインストール処理によっては、このレジストリの特定項目の書き換えが行われ、OSに変更が加えられる。このような、OSに特定の変更を加えるような処理の実行に際して、OSが所定の管理権限(例えばシステム権限)を要求する場合がある。
一方、アップデートインストーラによるアップデートインストール処理は、一般的には、OSに対する権限としてシステム権限よりも下位の権限であるユーザ権限のプロセス(ユーザ権限プロセス)により実行される。OSは、ユーザ権限プロセスにより実行されるアップデートインストール処理に対し、一定の制限を与えることができる。例えば、Windows Vista(登録商標)以上のバージョンのWindows(登録商標)では、UAC(User Account Control)と呼ばれる仕組みにより、アップデートインストーラによりアップデートインストール処理が実行される際に、OSの管理者権限を持つ管理者情報の入力や、インストール処理の続行の確認を行うためのUI(User Interface)画面をディスプレイ1007に対してポップアップ表示させる。
図3は、既存技術による、UACによりポップアップ表示されるUI画面としてのポップアップ表示画面の例を示す。図3において、ポップアップ表示画面30は、表示領域31、32および33と、ボタン35および36とを含む。また、表示領域33は、入力領域34を含む。図3の例では、表示領域31は、このポップアップ表示画面30に関するメッセージが表示され、表示領域32は、アップデートインストール処理の対象のソフトウェアに関する情報が表示される。表示領域33は、管理者情報の入力をユーザに促すためのメッセージが表示され、管理者情報(管理者パスワード)を入力するための入力領域34が設けられる。
ボタン35は、入力領域34に入力された管理者パスワードの照合を行いアップデートインストール処理を続行させるためのボタンである。入力領域34に正しい管理者パスワードが入力された状態でボタン35が操作された場合、このポップアップ表示画面30が閉じられ、アップデートインストール処理が続行される。一方、入力領域34に誤った管理者パスワードが入力された状態でボタン35が操作された場合、ポップアップ表示画面30の表示が継続され、入力領域34に対する管理者パスワードの入力が促される。
ボタン36は、アップデートインストール処理を中止するためのボタンである。ボタン36が操作された場合、このポップアップ表示画面30が閉じられ、アップデートインストール処理が中止(キャンセル)される。例えば、ユーザが管理者情報を知らない場合、このボタン36を操作することで、アップデートインストール処理を中止させることができる。
上述したように、UACによるポップアップ表示画面30は、例えばアップデートインストーラといったプログラムがOSに特定の変更を加える場合に、必要な管理権限が無ければ表示される。当該プログラムが、Windowsにより提供されWindowsの動作中はバックグラウンドで動作する、Windowsサービスとして動作するプログラムであれば、当該プログラムは、システム権限のプロセス(システム権限プロセス)で動作し、管理者権限を持つ。また、Windowsサービスから起動されたプロセスは、システム権限がWindowsサービスから継承される。そのため、Windowsサービスからシステム権限を継承したサブプロセスとしてアップデートインストーラを起動することで、ポップアップ表示画面30の表示を抑制できる。
一方、OSにログイン中のユーザに対して、現在実行されているプログラム(例えばアップデートインストーラ)の情報を通知するためのUI画面を表示するためには、当該プログラムがWindowsサービス以外のプロセスであって、ユーザ権限プロセスであるユーザプロセスで動作している必要がある。すなわち、Windowsサービスとして動作するプログラムの動作環境は、ログイン中のユーザの動作環境と切り離されているため、Windowsサービスから権限を引き継いだサブプロセスとして起動されたアップデートインストーラは、複数有り得る動作環境から表示すべきデスクトップを特定できず、UI画面を表示することができないためである。
また、アップデートインストーラは、ソフトウェアの更新(アップデートインストール)を実行する際に、更新対象のソフトウェアを構成するモジュール(ファイル)を上書きする。そのため、更新対象のソフトウェア自身は、動作が停止した状態でなければならない。したがって、更新対象のソフトウェアとは別のプロセスで動作するコンポーネントが、アップデートインストーラを制御する必要がある。
(実施形態に係るアップデートインストール処理)
次に、実施形態に係るアップデートインストール処理について説明する。実施形態では、実施形態に係るアップデートインストール処理を行うために、アップデートインストーラによる処理を支援する支援ソフトウェアを提供する。図4は、実施形態に係る情報処理プログラムとしての支援ソフトウェアの構成の例を示す。
図4において、実施形態に係る支援ソフトウェア100は、本体ユーザプロセス部111および本体システムサービス部121を含む本体ソフトウェアと、アップデートエージェントユーザプロセス部112およびアップデートエージェントシステムプロセス部122を含むアップデートエージェントと、特定ソフトウェア130と、を含む。アップデートエージェントは、本体ソフトウェアから起動されるコンポーネントを含む。アップデートエージェントは、本体ソフトウェアを停止および起動させることができると共に、アップデートインストーラによるアップデートインストール処理を制御する。すなわち、アップデートエージェントは、本体ソフトウェアからアップデートインストーラによるアップデートインストール処理を制御する際の仲介を行う仲介部であると考えることができる。
特定ソフトウェア130は、例えば、各クライアントPC10a、10b、…に共通して搭載されるソフトウェアである。特定ソフトウェア130の例として、画像形成装置21を各クライアントPC10a、10b、…から利用するためのドライバプログラムを適用することができる。特定ソフトウェア130は、ドライバプログラムに限られず、他の種類のソフトウェアであってもよい。
支援ソフトウェア100は、ファイルサーバ20上においては、支援ソフトウェア100自身を更新(アップデートインストール)するためのアップデートインストーラに同梱または内包されて、所定のフォルダに格納される。
支援ソフトウェア100において、アップデートエージェントに含まれるアップデートエージェントユーザプロセス部112は、ユーザ権限プロセス(第2プロセス)で動作するコンポーネントである。アップデートエージェントユーザプロセス部112は、本体ユーザプロセス部111の起動および停止を行うための本体ユーザプロセス起動・停止部1120と、UI表示を行うためのUI表示部1121と、アップデートインストーラによる処理進捗状況を監視するためのアップデート状況監視部1122と、を含む。
また、アップデートエージェントに含まれるアップデートエージェントシステムプロセス部122は、システム権限プロセス(第1プロセス)で動作して、アップデートインストーラをシステム権限プロセスのサブプロセスとして起動させるためのコンポーネントである。アップデートエージェントシステムプロセス部122は、本体システムサービス部121の起動および停止を行うためのシステムサービス起動・停止部1221と、アップデートインストーラの動作を監視するためのアップデートインストーラプロセス監視部1220と、を含む。
支援ソフトウェア100において、本体ソフトウェアに含まれる本体ユーザプロセス部111は、ユーザ権限プロセスで動作するコンポーネントである。本体ユーザプロセス部111は、ファイルサーバ20にアクセスしてアップデートインストーラを探索するためのアップデート確認部1110と、ファイルサーバ20からアップデートインストーラをダウンロードし取得するためのインストーラ取得部1111と、アップデートエージェントユーザプロセス部112を起動するためのアップデートエージェントユーザプロセス起動部1112と、を含む。本体ユーザプロセス部111は、さらに、特定ソフトウェア130を含む。
また、本体ソフトウェアに含まれる本体システムサービス部121は、システム権限プロセスで動作するコンポーネントである。本体システムサービス部121は、この支援ソフトウェア100が起動された例えばクライアントPC10aのOSにログインしているログインユーザのユーザ情報を管理するためのログインユーザ管理部1211と、アップデートエージェントユーザプロセス部112およびアップデートエージェントシステムプロセス部122を管理するためのアップデートエージェント管理部1212と、を含む。
ここで、OSがWindows(登録商標)である場合、本体システムサービス部121は、Windowsサービスである。上述したアップデートエージェントシステムプロセス部122は、本体システムサービス部121から起動される。これにより、アップデートエージェントシステムプロセス部122は、システム権限プロセスとして動作できる。
なお、本体ソフトウェア(本体ユーザプロセス部111および本体システムサービス部121)は、アップデートエージェント(アップデートエージェントユーザプロセス部112およびアップデートエージェントシステムプロセス部122)の各モジュールを、アップデートインストーラがアクセスしない一時フォルダにコピーし、一時フォルダ内のアップデートエージェントを起動する。これは、アップデートインストーラがアップデートエージェントのモジュールを更新する場合に対応するためである。
図5は、実施形態に係る支援ソフトウェア100を起動させた場合のクライアントPC10aの機能を説明するための一例の機能ブロック図である。なお、図5において、上述した図4の支援ソフトウェア100がクライアントPC10aにおいて実行されることでクライアントPC10a上で実現される機能は、図4の対応する部分と同一の名称および符号を付して示している。
図5において、支援ソフトウェア100が起動されたクライアントPC10aは、本体ユーザプロセス部111と、アップデートエージェントユーザプロセス部112と、本体システムサービス部121と、アップデートエージェントシステムプロセス部122と、を含む。これらのうち、本体ユーザプロセス部111およびアップデートエージェントユーザプロセス部112は、ユーザ権限プロセスで動作するグループ(ユーザプロセス部110)として示している。また、本体システムサービス部121およびアップデートエージェントシステムプロセス部122は、システム権限プロセスで動作するグループ(システムプロセス部120)として示している。
ユーザプロセス部110は、クライアントPC10aのOSにログインしたログインユーザ毎に起動される。すなわち、支援ソフトウェア100は、複数のユーザプロセス部110を並行して起動させることができる。
図5において、本体ユーザプロセス部111は、アップデート確認部1110と、インストーラ取得部1111と、アップデートエージェントユーザプロセス起動部1112とを含む。アップデートエージェントユーザプロセス部112は、本体ユーザプロセス起動・停止部1120と、UI表示部1121と、アップデート状況監視部1122とを含む。本体システムサービス部121は、ログインユーザ管理部1211と、アップデートエージェント管理部1212とを含む。また、アップデートエージェントシステムプロセス部122は、アップデートインストーラプロセス監視部1220と、システムサービス起動・停止部1221とを含む。
これら本体ユーザプロセス部111、アップデートエージェントユーザプロセス部112、本体システムサービス部121およびアップデートエージェントシステムプロセス部122、ならびに、これらに含まれる各部は、実施形態に係る情報処理プログラムとしての支援ソフトウェア100がCPU1000上で動作することにより実現される。これに限らず、図5に示される各部の一部または全部を、互いに協働して動作するハードウェア回路により構成してもよい。
クライアントPC10aにおける実施形態に係る各機能を実現するための支援ソフトウェア100は、インストール可能な形式または実行可能な形式のファイルでCD(Compact Disk)、フレキシブルディスク(FD)、DVD(Digital Versatile Disk)などのコンピュータで読み取り可能な記録媒体に記録して提供される。これに限らず、当該支援ソフトウェア100を、インターネットなどのネットワークに接続されたコンピュータ上に格納し、当該ネットワークを介してダウンロードさせることにより提供してもよい。また、当該支援ソフトウェア100をインターネットなどのネットワークを経由して提供または配布するように構成してもよい。
当該支援ソフトウェア100は、本体ユーザプロセス部111、アップデートエージェントユーザプロセス部112、本体システムサービス部121およびアップデートエージェントシステムプロセス部122、ならびに、これらに含まれる各部を含むモジュール構成となっている。実際のハードウェアとしては、CPU1000がストレージ1004などの記憶媒体から当該支援ソフトウェア100を読み出して実行することにより、上述した各部がRAM1002などの主記憶装置上にロードされ、本体ユーザプロセス部111、アップデートエージェントユーザプロセス部112、本体システムサービス部121およびアップデートエージェントシステムプロセス部122、ならびに、これらに含まれる各部が主記憶装置上に生成されるようになっている。
次に、図5に示される、本体ユーザプロセス部111、アップデートエージェントユーザプロセス部112、本体システムサービス部121およびアップデートエージェントシステムプロセス部122に含まれる各部について、より詳細に説明する。
本体ユーザプロセス部111において、アップデート確認部1110は、ファイルサーバ20にアクセスして、クライアントPC10aに搭載される当該支援ソフトウェア100に対応するアップデートインストーラの存在を確認する。アップデート確認部1110は、対応するアップデートインストーラの存在が確認された場合、そのアップデートインストーラのバージョンを取得し、取得したバージョンに基づき支援ソフトウェア100のアップデートが必要か否かを判定する。
インストーラ取得部1111は、アップデート確認部1110の確認結果に応じて、ファイルサーバ20からアップデートインストーラを取得し、取得したアップデートインストーラを、例えばストレージ1004上に設けられる一時フォルダに保存する。アップデートエージェントユーザプロセス起動部1112は、アップデートエージェントユーザプロセス部112を起動する。
アップデートエージェントユーザプロセス部112において、本体ユーザプロセス起動・停止部1120は、本体ユーザプロセス部111の起動および停止を行う。UI表示部1121は、UIによる画面表示を行う。例えば、UI表示部1121は、アップデートインストーラによるアップデートインストール処理の進捗や、結果を示す画面の表示を行う。アップデート状況監視部1122は、アップデートエージェントシステムプロセス部122と通信を行い、アップデートインストーラの状況を監視する。
本体システムサービス部121において、ログインユーザ管理部1211は、本体ユーザプロセス部111を起動したログインユーザのユーザ情報をOSから取得し、取得したユーザ情報を、表1に示されるような起動ユーザリストに登録して例えばRAM1002に記憶する(管理ステップ)。起動ユーザリストに登録するユーザ情報は、ユーザがログイン時に入力するユーザ名であってもよいし、当該ユーザのアカウントに対応するSID(Security Identifier)であってもよい。
表1の例では、現在、本体ユーザプロセス部111が、ユーザ名「userA」およびユーザ名「userB」の2人のユーザにより起動されていることが示されている。ログインユーザ管理部1211は、新たなユーザにより本体ユーザプロセス部111が起動された場合には、当該ユーザのユーザ情報を起動ユーザリストに追加する。また、ログインユーザ管理部1211は、起動ユーザリストのエントリに含まれるユーザ情報が示すユーザがログアウトした場合、そのユーザ情報のエントリを削除する。また、ログインユーザ管理部1211は、本体ユーザプロセス部111が終了された場合に、当該ユーザプロセス部111を起動したユーザのユーザ情報を、起動ユーザリストから削除する。この起動ユーザリストを参照することで、現在起動されている本体ユーザプロセス部111の数や、ログイン中のユーザのアカウント情報を把握することができる。
アップデートエージェント管理部1212は、アップデートエージェントユーザプロセス部112およびアップデートエージェントシステムプロセス部122を構成するための各モジュールの、ストレージ1004における一時フォルダへの記憶、および、これら各モジュールが不要になった場合の一時フォルダからの削除を行う。また、アップデートエージェント管理部1212は、アップデートエージェントシステムプロセス部122を起動させる。
システムプロセス部120において、アップデートエージェントシステムプロセス部122に含まれるアップデートインストーラプロセス監視部1220は、上述したインストーラ取得部1111により一時フォルダに記憶されたアップデートインストーラを起動させる。アップデートインストーラは、システム権限プロセスによるアップデートインストーラプロセス監視部1220から起動されるため、アップデートインストーラプロセス監視部1220からシステム権限が継承される。これにより、上述したUACによるポップアップ表示画面30の表示を抑制できる。
また、アップデートインストーラプロセス監視部1220は、起動させたアップデートインストーラによるプロセスを、当該アップデートインストーラが終了するまで監視する。
システムサービス起動・停止部1221は、アップデートインストーラの起動前に、本体システムサービス部121の動作を停止させる。また、システムサービス起動・停止部1221は、アップデートインストーラの終了後に、本体システムサービス部121を起動させる。
(実施形態に係るアップデートインストーラ制御の詳細)
次に、実施形態に係るアップデートインストーラ制御について、より詳細に説明する。なお、以下では、ファイルサーバ20は、各クライアントPC10a、10b、…にインストールされる特定ソフトウェアをより新しいバージョンの特定ソフトウェア130にアップデートインストールするためのアップデートインストーラが配置されている。上述したように、このアップデートインストーラは、実施形態に係る支援ソフトウェア100が内包され、この支援ソフトウェア100は、当該特定ソフトウェアより新しいバージョンの特定ソフトウェア130が内包される。また、アップデートインストーラは、UI表示などを行わないサイレントモードでアップデートインストール処理を実行可能であるものとする。
図6は、実施形態に係る支援ソフトウェアの動作を示す一例のフローチャートである。例えばクライアントPC10aにおいて、ステップS100で、支援ソフトウェア100が所定のトリガに応じて起動される。例えば、例えばクライアントPC10aのOSにログインしたログインユーザが当該支援ソフトウェア100に含まれる特定ソフトウェア130を起動したことをトリガとして、支援ソフトウェア100が起動される。これに限らず、支援ソフトウェア100は、クライアントPC10aのOSに対するユーザのログインをトリガとして起動されてもよい。支援ソフトウェア100が起動されることで、当該支援ソフトウェア100の本体ユーザプロセス部111が起動される。
本体ユーザプロセス部111は、起動されると、自身を起動したログインユーザのユーザ情報を本体システムサービス部121に渡す。本体システムサービス部121において、ログインユーザ管理部1211は、本体ユーザプロセス部111から渡されたユーザ情報を、起動ユーザリスト(表1参照)に追加登録する。
次のステップS101で、支援ソフトウェア100において、アップデート確認部1110は、ファイルサーバ20にアクセスし、クライアントPC10aに既に搭載されている支援ソフトウェア100に対応するアップデートインストーラを探索する。例えば、ファイルサーバ20は、アップデートインストーラの実行ファイルと同じフォルダに、ソフトウェアを一意に識別可能なGUID(Globally Unique Identifier)が記述された所定フォーマットの設定情報ファイルを配置しておく。アップデート確認部1110は、ファイルサーバ20からこの設定情報ファイルを取得し読み込むことで、当該アップデートインストーラのファイルサーバ20への配置の有無を確認する(ステップS102)。
ステップS102で、アップデート確認部1110は、探索対象のアップデートインストーラのファイルサーバ20への配置が確認されなかった場合(ステップS102、「無し」)、処理をステップS110に移行させる。ステップS110で、支援ソフトウェア100の通常起動が行われる。通常起動は、アップデートインストール処理を行わない起動である。例えば、支援ソフトウェア100は、通常起動において、特定ソフトウェア130を起動させる。例えば、ステップS110において起動された特定ソフトウェア130による動作が終了されると、処理がステップS107に移行され、支援ソフトウェア100の動作が終了される。
ステップS102で、アップデート確認部1110は、探索対象のアップデートインストーラのファイルサーバ20への配置が確認された場合(ステップS102、「有り」)、処理をステップS103に移行させる。ステップS103で、アップデート確認部1110は、ステップS102で確認されたアップデートインストーラのバージョンと、クライアントPC10aに現在搭載されている当該支援ソフトウェア100のバージョンとを比較する。
例えば、ファイルサーバ20は、アップデートインストーラのバージョンが記述された所定フォーマットの設定情報ファイルを、当該アップデートインストーラの実行ファイルと同じフォルダに配置しておく。アップデート確認部1110は、ファイルサーバ20からこのバージョンが記述された設定情報ファイルを取得し読み込むことで、当該アップデートインストーラのバージョンを知ることができる。アップデート確認部1110は、クライアントPC10aに搭載される支援ソフトウェア100のバージョンと、アップデートインストーラのバージョンとを比較する。
アップデート確認部1110は、ステップS103の比較の結果、アップデートインストーラのバージョンが、クライアントPC10aに搭載される支援ソフトウェア100のバージョンより低い、または、両者のバージョンが同じと判定した場合(ステップS104、「低いor同じ」)、処理をステップS110に移行させ、例えば特定ソフトウェア130を通常起動させる。
一方、アップデート確認部1110は、ステップS103の比較の結果、アップデートインストーラのバージョンが、クライアントPC10aに搭載される支援ソフトウェア100のバージョンよりも高いと判定した場合(ステップS104、「高い」)、処理をステップS105に移行させる。
ステップS105で、支援ソフトウェア100において、本体ユーザプロセス部111は、現在他のユーザが本体ユーザプロセス部111を起動していないことを確認する(詳細は後述する)。本体ユーザプロセス部111は、この確認の結果に基づき、現在他のユーザが本体ユーザプロセス部111を起動していると判定した場合(ステップS105、「No」)、処理をステップS111に移行させ、当該本体ユーザプロセス部111によるアップデートインストールが実行できない旨のエラー表示を行い、処理をステップS110に移行させる。
一方、本体ユーザプロセス部111は、ステップS105で、ログインユーザ管理部1211による確認の結果に基づき、現在本体ユーザプロセス部111を起動している他のユーザが存在しないと判定した場合(ステップS105、「Yes」)、処理をステップS106に移行させる。ステップS106で、支援ソフトウェア100は、アップデートインストーラによるアップデートインストール処理を実行する(詳細は後述する)。
アップデートインストーラによるアップデートインストール処理が完了すると、処理がステップS107に移行され、支援ソフトウェア100の動作が終了される。
次に、図7を用いて、上述したステップS106による、実施形態に係るアップデートインストール処理をより詳細に説明する。本体ユーザプロセス部111は、インストーラ取得部1111により、上述のステップS101およびステップS102によるアップデートインストーラの探索結果に基づき、ファイルサーバ20からアップデートインストーラをダウンロードし、アップデートインストーラを取得する(ステップS1)。
次に、本体ユーザプロセス部111は、アップデートエージェントユーザプロセス起動部1112により、アップデートエージェントユーザプロセス部112を起動させる(ステップS10)。
ここで、アップデートエージェントユーザプロセス起動部1112は、アップデートエージェントユーザプロセス部112を起動させる前に、支援ソフトウェア100に内包されるアップデートエージェント(アップデートエージェントユーザプロセス部112およびアップデートエージェントシステムプロセス部122)を構成するプログラムファイルなど一式を、クライアントPC10aにおいて例えばストレージ1004上に作成された一時フォルダにコピーする。ステップS10で、アップデートエージェントユーザプロセス起動部1112は、この一時フォルダにコピーされたアップデートエージェントのプログラムファイル一式に含まれるアップデートエージェントユーザプロセス部112を起動させる。すなわち、このアップデートエージェントのプログラムファイル一式も、アップデートの対象となるため、コピーされたプログラムの方を実行させる。
本体ユーザプロセス部111は、アップデートエージェントユーザプロセス部112を起動させると、ステップS11で、アップデートインストーラ140の起動を指示する起動指示を含む通知を本体システムサービス部121に渡す(通知ステップ)。
本体システムサービス部121は、ステップS11で本体ユーザプロセス部111から渡された通知を受け取ると、アップデートエージェント管理部1212により、アップデートエージェントシステムプロセス部122を起動させる(ステップS12)。アップデートエージェントシステムプロセス部122は、本体システムサービス部121から起動されることで、システム権限を継承することができる。
ステップS12でアップデートエージェントシステムプロセス部122が起動された後、本体ユーザプロセス部111および本体システムサービス部121の動作を停止させる必要がある。例えば、起動したアップデートエージェントユーザプロセス部112およびアップデートエージェントシステムプロセス部122において、本体ユーザプロセス起動・停止部1120により本体ユーザプロセス部111を停止させ、システムサービス起動・停止部1221が本体システムサービス部121を停止させる。これに限らず、本体ユーザプロセス部111や本体システムサービス部121が自身を終了させることができる場合には、自身で終了させてもよい。
アップデートエージェントシステムプロセス部122は、ステップS13で、アップデートインストーラプロセス監視部1220により、アップデートインストーラ140をサイレントモードで起動させる(起動ステップ)。アップデートエージェントシステムプロセス部122は、システム権限で動作している。そのため、アップデートエージェントシステムプロセス部122が生成したアップデートインストーラ140のプロセスは、システム権限を継承して動作することができ、UACによるポップアップ表示画面30の表示を回避できる。
また、アップデートエージェントシステムプロセス部122は、自身が起動したアップデートインストーラ140の実行状況を監視する。
アップデートインストーラ140は、内包される支援ソフトウェア100の各コンポーネントにより、クライアントPC10aに搭載されている支援ソフトウェア100を更新し、支援ソフトウェア100のアップデートインストール処理を行う。このとき、アップデートインストーラ140は、支援ソフトウェア100の本体ユーザプロセス部111に内包される特定ソフトウェア130のアップデートインストール処理も実行する。
一方、アップデートエージェントユーザプロセス部112は、アップデート状況監視部1122により、アップデートエージェントシステムプロセス部122を介して、アップデートインストーラ140によるアップデートインストール処理の実行状況を監視する(ステップS14)。より具体的には、アップデートエージェントユーザプロセス部112は、アップデート状況監視部1122により、名前付きパイプを用いてアップデートエージェントシステムプロセス部122と定期的に通信を行い(ステップS14a、ステップS14b)、アップデートインストーラプロセス監視部1220からアップデートインストーラ140の実行状況を示す情報を取得する。
アップデートエージェントユーザプロセス部112は、UI表示部1121により、アップデート状況監視部1122からアップデートインストーラ140の実行状況を示す情報を取得し、当該実行状況を提示するための表示を行う(提示ステップ)。UI表示部1121は、この実行状況を示す情報がアップデートインストール処理が終了していないことを示している場合には、アップデートインストール処理が実行中であることを示す表示を行う。また、UI表示部1121は、実行状況を示す情報がアップデートインストール処理が完了したことを示している場合には、アップデートインストール処理の成功または失敗を示す表示を行う。
図8は、実施形態に適用可能な、UI表示部1121により表示されるアップデートインストール処理の実行状況を示す進捗表示画面の例を示す。図8(a)は、アップデートインストール処理が実行中であることを示す進捗表示画面40の例を示す。図8(a)の例では、進捗表示画面40は、アップデートインストール処理が実行中である旨を示すメッセージ400と、アップデートインストール処理の進捗状況を概略的に示す進捗表示401および402と、を含む。進捗表示401は、アップデートインストール処理の進捗状況をグラフィカルに表現した例である。また、進捗表示402は、当該進捗状況を、アップデートインストール処理が終了するまでの概略的な残時間を推測して表現した例である。
なお、図8(a)の例では、進捗表示画面40が、メッセージ400と、進捗表示401および402とを含んでいるが、これはこの例に限定されない。すなわち、進捗表示画面40は、ユーザがアップデートインストール処理が実行中であることを認識可能な表示が行われていればよく、例えば、メッセージ400、進捗表示401および402のうち少なくとも1つが表示されていればよい。また、アップデートインストール処理の実行中を示す表示は、図8(a)の例に限定されない。
図8(b)は、アップデートインストール処理が終了した場合の進捗表示画面41の例を示す。図8(b)に示される進捗表示画面41は、アップデートインストール処理の成功または失敗を示すメッセージ410が表示される。この例では、メッセージ410は、アップデートインストール処理が成功し、アップデートインストール処理が完了した旨を示している。ボタン411は、この進捗表示画面41を閉じるためのボタンである。
アップデートエージェントシステムプロセス部122において、システムサービス起動・停止部1221は、アップデートインストーラプロセス監視部1220からアップデートインストール処理の完了を示す情報を取得すると、本体システムサービス部121を起動させる(ステップS15)。同様に、アップデートエージェントユーザプロセス部112において、本体ユーザプロセス起動・停止部1120は、アップデート状況監視部1122からアップデートインストール処理の完了を示す情報を取得すると、本体ユーザプロセス部111を起動させる(ステップS16)。
ステップS15およびステップS16にて本体ユーザプロセス部111および本体システムサービス部121が起動されると、図6のフローチャートにおける処理が、ステップS106からステップS107に移行され、支援ソフトウェア100の動作が終了される。
次に、図9を用いて、上述したステップS105による、現在他のユーザが本体ユーザプロセス部111を起動しているか否かを判定する処理について、より詳細に説明する。本体ユーザプロセス部111は、本体ユーザプロセス部111が起動されると、自身を起動させたログインユーザのユーザ情報をOSから取得して本体システムサービス部121に渡す。
上述したように、本体システムサービス部121において、ログインユーザ管理部1211は、本体ユーザプロセス部111から渡されたユーザ情報を起動ユーザリストに登録し、例えばRAM1002に記憶する。ログインユーザ管理部1211は、起動ユーザリストに登録されたユーザ情報を、そのユーザ情報が示すユーザがログアウトするか、当該ユーザ情報が示すユーザにより起動された本体ユーザプロセス部111が終了されるまで、RAM1002上に保持する。起動ユーザリストは、必要に応じて本体システムサービス部121により参照される。
図9の例では、ログインユーザ名「userA」および「userB」の各ユーザによりそれぞれ本体ユーザプロセス部111が起動された状態が示されている。図9において、ログインユーザ名「userA」のユーザにより起動された本体ユーザプロセス部111を本体ユーザプロセス部111#Aとし、ログインユーザ名「userB」のユーザにより起動された本体ユーザプロセス部111を本体ユーザプロセス部111#Bとして、それぞれ示されている。
本体ユーザプロセス部111#Aおよび111#Bは、それぞれ、例えばログインユーザ名「userA」および「userB」をユーザ情報として本体システムサービス部121に渡す。本体システムサービス部121において、ログインユーザ管理部1211は、これらログインユーザ名「userA」および「userB」を起動ユーザリスト(表1参照)に登録し、例えばRAM1002に記憶させ保持する。
図6のステップS105において、本体ユーザプロセス部111は、アップデートインストール処理の実行を開始する前に、本体システムサービス部121に対して、自身を起動させたユーザのユーザ情報を渡し、自身以外に、他のユーザ情報を持つユーザにより本体ユーザプロセス部111が起動されているか否かを問い合わせる。
本体システムサービス部121において、ログインユーザ管理部1211は、この問い合わせに応じて、保持している起動ユーザリストを参照して、本体ユーザプロセス部111から渡されたユーザ情報以外のユーザ情報が当該起動ユーザリストに登録されているか否かを調べ、その結果を本体ユーザプロセス部111に渡す。本体ユーザプロセス部111は、ログインユーザ管理部1211から渡された結果が、本体システムサービス部121に渡したユーザ情報以外のユーザ情報が起動ユーザリストに登録されている旨を示している場合、現在、他のユーザにより本体ユーザプロセス部111が起動中であると判定する。
例えば、図9の例において、起動ユーザリストにユーザ情報「userA」および「userB」が登録されている状態で、本体ユーザプロセス部111#Bからログインユーザ管理部1211に対して、ユーザ情報「userB」に関して問い合わせがなされたものとする。この場合、起動ユーザリストには、ユーザ情報「userB」の他に、当該ユーザ情報「userB」とは異なるユーザ情報「userA」が登録されているため、現在、他のユーザにより本体ユーザプロセス部111(この場合は本体ユーザプロセス部111#A)が起動中であると判定する。
なお、上述では、実施形態に係る支援ソフトウェア100を内包するアップデートインストーラがファイルサーバ20に保存されているように説明したが、これはこの例に限定されない。例えば、ネットワーク2に接続される管理用コンピュータに当該アップデートインストーラを保存しておくことも考えられる。
上述したように、実施形態では、アップデートインストーラがシステム権限プロセスによるアップデートインストーラプロセス監視部1220から起動されるため、システム権限が継承される。これにより、UACによるポップアップ表示画面30の表示が回避され、ソフトウェアのアップデートインストール処理時にユーザに要求されるアクションを抑制できる。
また、実施形態では、ログインユーザによりアップデートインストーラの起動が指示された際に、ログインユーザ管理部1211により、起動ユーザリストに基づき他のログインユーザが本体ユーザプロセス部111を起動していない場合に、アップデートインストーラの起動を可能としている。
そのため、アップデートインストーラがシステム権限を継承して動作していても、複数有り得る動作環境からアップデートインストーラが起動されているデスクトップを特定でき、アップデートインストーラの動作に応じたUI画面を表示可能である。また、他のログインユーザが本体ユーザプロセス部111の機能を実行してる場合に、その機能が妨げられることが防がれる。
なお、上述の各実施形態は、本発明の好適な実施の例ではあるがこれに限定されるものではなく、本発明の要旨を逸脱しない範囲において種々の変形による実施が可能である。