VBで作成したソフトを配布するインストーラに必要な機能及びあったらいいなと思う機能を私なりの考察で挙げてみます。
なんて当たり前なんでしょうか。しかしただ「ファイルのコピー」といっても、様々な方法があるでしょう。ここでは単純に「ファイルのコピー」とだけいっておき、詳しい内容については後ほど(8.及び9.)検討します。
これもインストーラとしては当たり前の機能ですね。しかしインストーラの中には、ショートカットを作成する場所が限定されたもの(スタートメニューのプログラム以下や、デスクトップ等)など、制限の多いものもたくさんあります。
コントロールパネルの「アプリケーションの追加と削除」からアンインストール出来るようにする機能です。そのためにはインストール時にアンインストールするためのソフト(以下アンインストーラ)もインストールする必要があり、あまりにバイト数が大きなアンインストーラだとかなり迷惑になるため、出来るだけ小さいものが望ましいでしょう。
VBで多用される"OCX"(およびDLLやTLB)ファイルですが、これはレジストリに登録しないと使用することが出来ません。(ちなみに登録するためには一般的に"REGSRV32.EXE"というソフトを使用する。これは大抵SYSTEMディレクトリに入っており、VSのCD-ROMにも入っている。また、ソースもサンプルとして公開されており、"REGSRV32.EXE"自体も再配布可能らしい。)そのため、OCXを使用するVBソフトをインストールするためにはOCXの登録が必要かと思われがちだが、実はVBで作成されたソフトは始めの起動時にOCXが登録されていないと自動的に登録するようになっているらしいので、OCXファイルを特別な場所に置かない限りインストーラにこの機能は必要ないようです。
レジストリに保存していた設定などを削除します。これをしないとレジストリが肥大化するため(微々たるものかもしれないが)、レジストリを使用するくせにこれを削除しないソフトは嫌われます。ただし、レジストリの下手な部分を削除すると大変なことになってしまうため、細心の注意が必要です。
インストーラの中にはアンインストール時にインストールしたファイルしか削除しないものが数多くあります。これはほとんどの場合、アンインストールしてもその残骸を残す結果となります。なぜなら、ヘルプファイル(*.hlp)を開くと嫌でも出来てしまうGIDファイルがあるだけで、そのフォルダも残したままにしてしまうからです。しかし、フォルダごと削除してしまうことはかなりの危険も伴います。たとえば、エンドユーザが間違えて重要なファイルがあるフォルダにソフトをインストールしてしまった時、アンインストールでこの重要なファイルをも削除してしまうことになります。できればインストールしていないファイルを削除する時にはエンドユーザに問い合わせてほしいものです。
ファイルのバージョン(又はタイムスタンプ)を比較してより新しいものだけをコピーする(あるいは問い合わせる)機能です。常に新しいファイルしかコピーしないとなると、バージョンダウンしたいときには面倒かもしれませんが、無条件で上書きコピーということになると、VBランタイムのような共有ファイルを古いバージョンで置き換えてしまうことにもなりかねず、かなりひんしゅくものです。VBランタイムをインストールする時は必ず必要な機能でしょう。
これから先はなくてもいいかなと思えるような機能です。
インストール時にEXEやDLLなどのファイルが使用中の場合、これらのコピーは当然失敗します。しかしインストーラの中には、パソコンの再起動時にこれらのファイルを自動的に置き換えてくれる機能を持ったものも数多くあります。VBランタイムをインストールする時はあってほしい機能です。
インストールするソフトにある拡張子を関連付ける機能です。拡張子は勝手に関連付けられるとかえって困るため、ユーザーに問い合わせる形でなければ必要ないような気がします(しかしそのようなインストーラは少ない)。必要ならばアプリケーション自身がこの機能を持つべきではないでしょうか。
使用条件があるときなどはもちろん必要でしょうが、そうでなくてもこれが何なのかを示すためにも必要だと思われます。
レジストリのSharedDLLs(たぶん"HKEY_LOCAL_MACHINE インストール時に任意の値を任意の場所のレジストリに書き込む機能です。9.の関連付けを独自に行ったり、"RunServices"からソフトを起動させたいときなど特別な事情があるときに必要となるかもしれませんが、普通は使わないでしょう。 その他に安定性や、操作性などもあるでしょうが、ここでは機能のみに絞らせていただきました。12.レジストリに書き込む