DOBON.NET プログラミング道: .NET Framework, VB.NET, C#, Visual Basic, Visual Studio, インストーラ, ...

2-2.Visual Studio Installer

制作者:Microsoft バージョン:1.1

ソフトの外観 インストール時の外観

注意:Visual Studio Installerがダウンロードできなくなりました。よって、すでに入手している人以外は使用できません。(2010/3/26 追記)

Windows 2000の登場とともに舞い降りたWindows Installer。Visual Studio InstallerはそのWindows Installerベースのセットアッププログラムをビルドし、パッケージ化するためのツールです。Visual Studio InstallerはVBユーザーの敵か味方か?!

Visual Studio Installerは無料でここから入手できます。Visual Studio Installerの使い方などに関しては、Visual Studio Installer Documentationをご覧下さい。

機能 可・不可 補足
ファイルのコピー  
ショートカットの作成 ショートカットの各種プロパティも指定可
下記の「ファイルのコピーで指定できる特別なフォルダ」に作成可能
コントロールパネルからのアンインストール  
OCXをレジストリに登録  
レジストリ情報の削除  
インストールしたフォルダごと削除  
バージョンを比較してコピー  
コピーに失敗したファイルをパソコン起動時に置き換える  
関連付け  
インストール前にREADMEを表示 「ユーザー登録」を表示可
SharedDLLsに登録 SharedLegacyFileプロパティにて設定。ただし、SYSTEMディレクトリ等にコピーされたファイルは無条件で登録されているみたい(?)。
レジストリに書き込む  
上記以外の機能 パッケージファイルの分割が可能
OSにより変更可能
Microsoft Windows Installerに完全対応
などなど

インストーラのサイズ等

インストーラのサイズ 0バイト?(ただし、Windows Installerをインストールするためのファイルを付けると、+2.59MB)
アンインストーラのサイズ 0バイト?
ファイルのコピーで指定できる特別なフォルダ 任意の場所(特別なフォルダとしては、Windowsフォルダ、Windowsシステムフォルダ、ユーザーのスタートメニュー、共通ファイルフォルダ、プログラムファイルフォルダ、ユーザーのデスクトップ、ユーザーのFavoritesフォルダ、ユーザーのアプリケーションデータフォルダ、ユーザーの個人データフォルダ、ユーザーの送るメニュー、ユーザーのテンプレートフォルダ、フォントフォルダ、それ以外はここ)(01/8/23修正)

独断による長所と短所

長所

1.VBに優しい

ディストリビューションウィザードと同様、VBプロジェクトファイルを解析して必要なファイルをリストアップしてくれるので何も考える必要がない。

2.高機能

必要な機能はほぼ全てそろっています。

3.配布パッケージが小さくて済む

余計なインストーラを同梱する必要がないので、配布パッケージが小さくて済みます。ただし、相手がWindows Installerをインストール済みである必要があります。

4.安心

ディストリビューションウィザードと同様、安心感があります。Windows2000へのインストールを考えると、ディストリビューションウィザード以上に確実だと思われます。

ちょっと気になるところ

1.Windows Installer がインストールされていないパソコンにはインストールできない

これが最大の欠点だと思われます。Windows Installerがインストールされていないパソコンでも使えるように、Windows Installerをインストールするためのファイルを同梱することも出来るのですが、これらを含めるとサイズが2.5MB位大きくなってしまい、とてもじゃありませんがやってられません。早くWindows Installerが普及することを祈るのみです。

Windows Installerのダウンロードについては、「Windows インストーラー エンジンの入手方法」などをご覧下さい

2.高機能すぎて何をしているのかいまいち分からない

これはひとえに私の勉強不足からなのですが、Windows Installerが何をしているのか、いまいち理解できていません。例えば、インストールしたソフトのショートカットのプロパティを見てみると、「場所」が空欄で、「リンク先」が灰色のソフトの名称になっています。「一体ショートカット先はどこ?」と思って探してみると、どうやら"C:\WINDOWS\Application Data\Microsoft\Installer"以下に出来た訳の分からないフォルダにある訳の分からない実行ファイルらしいのです。このためか、実行ファイルを手作業で入れ替え、前のファイルを別のファイル名で残しておいたりすると、ショートカットからこれを実行させた時親切にも古いファイルを元に戻してくれたりするようです。なんともありがた迷惑な話です。(01/8/23修正)

06/5/17追記:例で示した機能は、アドバタイズショートカット(Advertisable shortcut)と呼ばれるWindows Installerの機能です。アドバタイズショートカットを無効にする方法は、.NET Tipsの「アドバタイズショートカットではなく、普通のショートカットを作成する」で紹介しています。

3.アイコンのないファイルのショートカットを作ると変なことになる

たぶん2.に関連したことだと思うのですが、"*.hlp"などのファイルのシュートカットを作ったとき、そのままではアイコンが指定されていないときに表示されるアイコンになってしまいます。これを防ぐためにはショートカットのアイコンを明確に指定してやります。関連付けられたアプリケーションのアイコンを臨機応変に表示させる方法があるかどうかは分かりません。

4.スタートメニューのプログラムにショートカットを作る方法がはっきりしない

ぱっと見、スタートメニューのプログラムにショートカットを作る方法がまったく分かりません。これで苦労している方は多いでしょう(私も)。この方法がやっとわかりました。特殊フォルダを追加して、名前を"ProgramMenuFolder"とすればよいそうです(ここを参照)。スタートメニューのプログラムのフォルダ名はWindows95/98では半角カタカナなのに対して、Windows2000では全角なので、フォルダ名を決め打ちすると予期せぬことが起こります。それだけにこれは大切なことであり、あまりの不親切さに憤りさえ感じます。(01/8/23修正)

5.ディストリビューションウィザードが必要

ディストリビューションウィザードがインストールされていないとVB関連の機能は使えないようです。

6.訳の分からないエラー(みたいなもの)が出る

Visual StudioのSP5を入れた後にVisual Studio Installerを使ってVBで作ったソフトのパッケージを作ろうとしたところ、「<マージ モジュール名> 内の 1 つ以上のファイルがこのマシン上にインストールされているファイルのバージョンと異なります。」というようなメッセージが「タスク一覧」に表示されました。これをそのまま解釈すると、このままパッケージを作成すると古いバージョンのファイルを使うことになるということでしょうから、大変なことになります。対策をヘルプで調べようとしましたが、まるでなし。しかたなくネット検索してみると、見つかりました(リンク切れ。Visual Studio 6.0 SP5のCD-ROMに入っているHTMLファイルにも書かれていることに後で気づく。)。どうやら自分でファイルをコピーしなければいけないらしいのです。これぐらいのことは自動でやって欲しいものですが・・・。(Visual Studio 6.0 SP5用 Windows Installer マージ モジュールはここにあり。)
なおWindows2000ではこのメッセージは無視してもかまわないというようなことが書かれているので、それでもいいのかもしれません。

7.ユーザーインターフェイスが分かりにくい

Visual InterDevやVisual J++と同じインターフェイスを使っているため、わかりにくい点が多々あります。

8.実はWindows Installerの機能をごく一部しか使えない。

Windows Installerの詳しい説明はここにあります。

補足

Windows Installerがインストールされていない時に自動的にインターネットからダウンロードしインストールする方法

前置き

先に述べたようにmsi形式のパッケージはWindows Installer がインストールされていないパソコンにはインストールできないという最大の欠点があります。Visual Windows Installerでは「ビルドの形式」に「Windowsインストーラローダ付きインストーラ」を指定することにより、Windows Installerがインストールされていない時にこれを自動的にインストールしてくれるようにすることもできます。しかしこの方法では全体のパッケージのサイズが2.5MBほど大きくなってしまい、インターネットで配布するには現実的な方法とはいえません。

上記の方法でビルドを行うと「msi」ファイルのほかに同じフォルダに「Setup.exe」「InstMsiA.exe」「InstMsiW.exe」「Setup.ini」というファイルができ、このSetup.exeを実行させるとWindows Installerがインストールされているか調べ、されていればmsiファイルをインストールし、されていなければOSがWindows9X系かNT系か調べ、 「InstMsiA.exe」か「InstMsiW.exe」を実行してWindows Installerをインストールしてからmsiファイルをインストールするというようなことをしているみたいです。

ところで、Setup.exeを実行した時に、Windows Installerをインストールする必要があると判断された時にだけ自動的に「InstMsiA.exe」か「InstMsiW.exe」をダウンロードし、勝手にインストールしてくれるようなことができれば、これらの馬鹿でかいファイルをパッケージから外すことができてうれしいなと思いませんか?ここではそんな方法を考えます。

ここから実践

いろいろ調べてみた結果、次の方法でできそうな感じです。

まず「Windows Installer SDK」が必要なので、なければインストールします。つぎに「MsiStuff.exe」を探します。(私の場合、ver1.5ではWebフォルダにありましたが、ver2.0ではSamplesフォルダにソースしか見つかりませんでした。自分でコンパイルしろということでしょうか。)また同じフォルダに「Setup.exe」があることを確認します。(これもMsiStuff.exeと同様ver1.5ではWebフォルダにありましたが、ver2.0ではSamplesフォルダにソースしか見つかりませんでした。)

さてここで「MsiStuff.exe」と「Setup.exe」を同じフォルダにコピーし、次のようなコマンドを「コマンドプロンプト(DOS窓)」に打って実行します(一行です)。ここで「myapp.msi」は実行したいmsiのファイル名、「MyAppName」はインストールするパッケージの名前(日本語は文字化けの可能性あり)に変えてください。

MsiStuff setup.exe /d myapp.msi /n MyAppName /v 200 /i http://download.microsoft.com/download/WindowsInstaller/Install/2.0 /a W9XMe/EN-US/InstMsiA.exe /w NT45/EN-US/InstMsiW.exe

正常に終了した後、「Setup.exe」をmsiファイルと同じフォルダに置き(MsiStuff.exeはいらない)、Setup.exeを実行させればうまくいくと思われます。(私の環境ではうまくいったような気がしますがあまり自信はありません。情報を求む。)

また、MsiStuff.exeは32bit Windows NTベースのOSのみをサポートし、Setup.exeは32bit Windows、しかもIE4.0以上がインストールされている環境でのみ動くそうです。

MsiStuff.exeの使い方に関してはこちらをご覧下さい。

(02/8/4記述)

NT系OSですべてのユーザーが使えるようにインストールする方法

VSIではデフォルトでPer-user installationを行うようになっており、たとえ管理者権限でインストールしたとしてもインストールしたユーザーしか使えないようになってしまいます。管理者権限でインストールした時はすべてのユーザーで使えるようにする(Per-machine installation)ためにはALLUSERSプロパティを1または2にします。(MSDNではこちらが参考になります。)1にした時は管理者権限のないユーザーはインストール出来ずエラーが発生し、2にした時は管理者権限でインストールしたときのみPer-machine installationになり、そうでない時はPer-user installationとなります。

なお、ALLUSERSプロパティの値を指定する方法ですが、Orca(Windows Installer SDKに含まれる)により行います。Orcaでmsiファイルを開き、「Tables」の「Property」にRowを「Add Row」で追加してください。この時「Property」に「ALLUSERS」、「Value」に指定する値を入力します。

(02/9/27)

その他いろいろ

Windows Installerに関しては、.NET Tipsの「セットアップ」で紹介している記事も参考になると思います。(06/5/17追記)


トップページに戻る

メニューに戻る

次へ