Windows Installer のページの最初には「Microsoft Windows Installer is an installation and configuration service provided with Windows.」と書かれている。
MS-Translator によると「Microsoft Windows インストーラは、Windows に付属するインストールおよび構成サービスです。」となる。細かいところは、Platform Support of Advertisement を読めと続いている。
訳してみたら、「プラットフォーム サポートの提供情報」とある。とりあえず、よくわからない場合はページのツリーをたどってみるのが一番いい。ツリーを平たく並べると
Windows Installer>About Windows Installer>Overview of Windows Installer>Advertisement>Platform Support of Advertisement
となっている。ここはあえて手動翻訳して(MSの和訳だと Windows インストーラーとなるが、本来は、WindowsInstaller で一語扱いのほうがいいので、ここでは日本語にしない)
Windows Installer>Windows Installer について>Windows Installer の概要>アドバタイズ機能>アドバタイズ機能のプラットフォームサポート
となる。注意してほしいのが、Advertisement をストレートに日本語にしていないということだ。そのまま日本語化してしまうと広告、宣伝のどちらかになってしまう(ほかにも隠された意味はあるが…)。動詞にすれば、告知する、通知する、知らせるというあたりが追加されてくる。なのであえて日本語にするなら、通知機能というあたりだろう。
さて、このアドバタイズ機能とはなんなのだろう?こういうのはやっぱりAboutなページを読むのが一番!ということで、読んでみる。
「The Windows Installer can advertise the availability of an application to users or other applications without actually installing the application. If an application is advertised, only the interfaces required for loading and launching the application are presented to the user or other applications. If a user or application activates an advertised interface the installer then proceeds to install the necessary components as described in Installation-On-Demand.」
あえて出だしの段落を丸ごと持ってきてみた。直訳だと若干意味が不明確なので、すこし意訳してみると…
「Windows Installer にはアプリケーションを実際にインストールせずに利用可能な状態にするアドバタイズ機能がある。アドバタイズ機能は、あらかじめユーザーによる実行やアプリによるロードなどを行えるようにするインターフェース部分だけを用意しておき、オンデマンドインストールで説明されているように必要になった時に必要なコンポーネントをインストールする仕組みである。」
オンデマンドインストールはともかくとして、このインターフェース部分とはどこになるのだろう?その答えが書かれているのが、Platform Support of Advertisement だ。
まずサポートするプラットフォーム、要するにOSを指すのだが、2000以降のNT系OSに限られている。具体的にはOS出荷時点で Windows Installer を含めていたものということもできる。それだけ OS の根幹部分での連携が行われているともいえる。
実際のところ、すでにXPより古いOSはほとんどのソフトウェアが動作対象としてサポートしていないということもあり、大きな影響を受けることはないだろうが、それでもどこから使えるのか?という線引きがわかっているか動かは開発を行っていくうえで重要なことである。だがわずかながらもいまだに9X系やNT4を対象とした環境もある。それらでも Windows Installer を利用してインストールしていることがあるため、チェックは必須と言える。これらのチェックはSDKにも書かれているように、ShellAdvtSupport プロパティで確認する(類似するものに、OLEAdvtSupport プロパティもある)。
そして、もう一つ重要なのがトリガーとなるインターフェースだ。実際には
- ショートカット(IShellLinkによるアプリケーションの実行)
- 拡張子関連付け(ProgIdによるシェルコマンドの実行)
- CLSID(CoCreateInstanceによるCOMオブジェクトのロードと実行)
の3つがトリガーインターフェースとして用意されている(IShellLink経由はShellAdvtSupportで、ProgId/CLSID経由はOLEAdvtSupportで確認できるらしいが現状片方という環境がないため詳細はよくわからない)。
これらを入り口として実行しようとした際、実際に呼び出し先のコンポーネントがあるかどうかを確認し、なければその場(オンデマンド)でインストールを開始するのだ。
こうすることで、あまり利用されない機能はユーザーが必要としたときに初めてインストールするという仕組みになっているのである。
これがアドバタイズ機能と呼ばれるものの簡単な解説である。
製品の設計段階からインストーラの機能を把握していれば、ごくまれにしか利用されない(あるいは一部のユーザーしか使われない)ような仕組みをこのように分離しておくこともできるのである。