2011年1月2日日曜日

Windows Installer 開発

Windows Installer とは

Windows Installer は、一口で言うと Microsoft が提供するインストーラー実行環境とそこで動くインストーラーそのもののことです。

インストーラーが提供すべき最も基本的な機能は、プログラムをエンド ユーザーのコンピューターにコピーし、コピーしたプログラムが正しく動作できるように環境を整備することです。

インストールの逆の作業、つまりアンインストールも忘れてはならない重要なシナリオのひとつです。エンド ユーザーがプログラムを必要としなくなったときに、プログラムのコピーをエンド ユーザーのコンピューターから削除し、インストーラーが加えたコンピューターに対する変更をきちんと元に戻し、インストール前の環境を確実に復元することが求められます。

これらインストールおよびアンインストールといったシナリオをサポートするインストール プログラムを独自に開発することは不可能ではありませんし、実際、Windows Installer の登場以前は独自のインストーラーを持つソフトウェアが多数存在しました。

ソフトウェアのインストールという作業は単純なファイル コピーではありませんし、ソフトウェアのアンインストールという作業は単純なファイル削除でもありません。例えば C.dll という共通コンポーネントを持つ A.exe という製品と B.exe という製品がある場合、A のインストーラーは A.exe と C.dll をコンピューターにコピーし、B のインストーラーは B.exe と C.dll をコンピューターにコピーするものでしょう。これらのインストーラーが単純なファイル コピーであり、アンインストーラーが単純なファイル削除であった場合、コンピューターに A をインストールし、B をインストールした後に、A をアンインストールすると、A のアンインストーラーが C.dll を削除してしまい、C.dll を必要とする B が動かなくなってしまう、という不具合が発生します。

インストーラーにはソフトウェアのバージョンに合わせた適切な動作が求められる局面もあります。例えば X という製品のバージョン 2 がインストールされているコンピューターに X のバージョン 1 をインストールしようとした場合、インストーラーは既に同一製品の新しいバージョンがインストールされていることを検出し、新しいバージョンを削除して古いバージョンをインストールするか、古いバージョンのインストールを拒否するか、といった判断を下さなければならないでしょう。

このようなシナリオに適切に対応するには、どのファイルがどのインストーラーによって配置されたのか、どのファイルが複数のインストーラーで共有されているのか、インストールされている製品のバージョンはどうなっているか、といったような情報をコンピューターごとに一元的に管理しておくことが求められます。

このようなニーズに対応すべく、Windows 標準のコンポーネントとして Microsoft から送り出されたのが Windows Installer です。

Windows Installer のその他の機能

Windows Installer は、ソフトウェアのインストール シナリオとアンインストール シナリオ以外にも、いくつかの重要で便利な機能を提供します。

パッチ インストール

リリース後に露見した不具合を修正したパッケージを新たにエンド ユーザーに配布する手段として、完全なインストーラーではなく、更新された差分だけを収録したパッチと呼ばれる形式で配布できます。

一般的にパッチは完全なインストーラーよりもサイズが小さくなるため、インターネット等を通じた配布に適しています。また、パッチ単体ではコンピューターにソフトウェアを完全にインストールすることはできないため、インターネット上にパッチを公開しても、パッチの適用対象のソフトウェアの不正コピーにはつながりにくい、というメリットもあります。

また、一般的にサイズの小さなパッチを適用するのに要する時間は完全なインストーラーによってソフトウェアをインストールするのに要する時間よりも短いため、エンド ユーザーにとってもソフトウェアのバージョン アップという退屈な時間を短縮できるメリットがあります。

さらに Windows Installer では、インストールされたソフトウェア全体をアンインストールすることなく適用した一部のパッチのみをアンインストールする、つまりパッチ適用前の状態に戻す、といった機能もサポートされています。

修復インストール

Windows Installer には、修復インストールと呼ばれる機能もあります。

Windows Installer によってインストールされたファイルが破壊されたり削除されてしまった場合に、Windows Installer が必要なファイルをインストーラーから抽出し、インストールされた時と同じ状況になるように復元してくれる、強力な機能です。

アドバタイズ インストール

Windows Installer は、ファイルを実際にコンピューター上にコピーせず、そのファイルが必要になったときに改めてそのファイルだけをインストールする、アドバタイズと呼ばれるインストール方法をサポートしています。

例えば、インストールする製品にサポート ツールやアドオン ツールのような付属プログラムが存在する場合、インストール時にはそれらをコンピューターにコピーせず、それらを呼び出すためのスタート メニューのショートカットのみ作成しておき、エンド ユーザーがそのショートカットを使用してプログラムを起動しようとしたときに初めて必要なファイルをインストーラーから抽出し、コンピューターにコピーしてから実行する、といった動作を行うことが可能です。

インストーラー開発の重要性

ソフトウェア インストーラーは、Visual Studio インストーラーや InstallShield 等の製品を使用することにより比較的簡単に作成することができることも手伝って、インストーラー開発は残念ながらソフトウェア開発プロジェクトの中でも軽視されがちな領域です。

しかし、エンド ユーザーがソフトウェア製品の中でおそらく最初に触れるのはインストーラーです。インストーラーに致命的な不具合を抱えていると、どんなに単体の品質が高いソフトウェアであっても正しく動作しないでしょう。さらにアンインストーラーに致命的な不具合を抱えており、アンインストール時にエンド ユーザーのコンピューターを破壊してしまうなどしたら、そのソフトウェアのベンダーの信頼は地に堕ちたも同然でしょう。

堅牢性が高く、信頼性の高いインストーラーを開発することは、実際の製品であるソフトウェアの開発に勝るとも劣らないほど重要なものであることは間違いありません。特に開発するソフトウェアがコンシューマー向けの製品であるならば、慎重なインストーラーの開発と徹底的なインストーラーのテストを行う必要があります。

まとめ

Windows Installer は 1999 年の登場以降 10 年余の歳月を経た現在に至るまで、大きな機能追加はほとんど行われていない代わりに、ユーザー アカウント制御 (UAC:User Account Control) への対応など OS との連携や、インストーラー実行環境としての信頼性と堅牢性などが強化されてきました。

Windows Installer を利用した、品質の高いインストーラーを開発するためには、まず Windows Installer がどのような機能を提供するコンポーネントであり、それらの機能を正しく利用するためにはどうすればよいのか、といった知識が必要になります。

Windows Installer を正しく理解し、Windows Installer を正しく利用し、Windows Installer 向けのインストーラーを正しく開発することは、ソフトウェア開発プロジェクトの中で決して軽視してはならない領域であり、それなりの工数を見積もっておかなければならないことを、ソフトウェア開発プロジェクトの中できちんと認識しておく必要があるでしょう。

0 件のコメント:

コメントを投稿