Visual Studio Installer (インストーラー プロジェクト) は Visual Studio 2012 からサポートされなくなっていて、無償で手軽にインストーラーを作成するには Flexera 社の InstallShield LE をダウンロードして使う必要がありました。(手軽じゃなく本気でやるなら WiX を使うという方法もあるらしい。) でも、InstallShield LE は無償で提供してくださっている物なので、当然ながらいろいろ機能が制限されていて、「製品版ならもっと便利なあれやこれやが使えますよ~製品版買ってね」というアピールを兼ねた、機能制限を示す錠前のアイコンが至るところに表示されるため、それらを横目に見つつ悔しい思いをしていました。ところがこのところ、Visual Studio Installer が復活しているみたいです。しかも、Visual Studio Community でも使えるみたいです。ありがたや~。
はるか昔 Visual Studio Installer のインストーラー プロジェクトを 2、3 回作ったことがあるのですが、案の定、忘却の彼方…。今回覚えたことを忘れぬよう、ここにメモしておきます。なお、基本的な使い方については、とてもわかりやすくまとめてくださっているサイトがたくさんあり、検索するとすぐに見つかると思います。よって、ここには TIPS のみ記載していきます。
環境
- Visual Studio のバージョン: Community 2013 Update 4
- Visual Studio 2013 インストーラー プロジェクトのバージョン: 1.0.0.0
Visual Studio Installer の入手方法
下記のサイトからダウンロードできます。
インストールすると、Visual Studio のプロジェクトの追加ダイアログに、[インストール済み] – [その他のプロジェクトの種類] – [セットアップと配置] – [Visual Studio Installer] が追加されます。
Windows Installer のプロパティ
カスタム動作の CustomActionData プロパティに値を設定しておくことにより、カスタム動作に任意のデータを渡すことができます。Windows Installer のプロパティの値を渡したい場合は、プロパティ名を [] で囲って指定します。たとえば、インストール先のフォルダのパスを渡すなら、/targetdir=”[TARGETDIR]\” のように指定します。この事についてはいろいろなサイトで触れられているのですが、はて、TARGETDIR プロパティ以外にどんなプロパティがあるのか…、その一覧が下記のページに記載されていました。
また、CustomActionData プロパティに値を設定しない状態でインストーラーを作成しても、下記の 4 つの値がカスタム動作に渡されてきていました (Install メソッド内で調べました) 。
項目名 | 値 |
---|---|
logfile | “” |
action | “install” |
installtype | “notransaction” |
assemblypath | インストールされたアセンブリのパス |
CustomActionData プロパティに設定した値と同様、上記の値も、this.Context.Parameters[“項目名”] の形で参照できます。
カスタム動作のデバッグ方法
カスタム動作のソースコードにブレークポイントを設定して、デバッグする手順がわからず、いろいろ試してみた結果、下記のページに記載されていた方法を参考にして実現できました。
手順は、下記のとおり。
- Visual Studio の [デバッグ] メニュー – [プロセスにアタッチ…] をクリックします。すると、[プロセスにアタッチ] ダイアログ ボックスが表示されますので、図の手順で操作します。これで、Visual Studio から、インストーラーのプロセスにアタッチできます。
- [すべてのユーザーからのプロセスを表示する] チェック ボックスにチェックをつけます。こうすることで、SYSTEM ユーザーのプロセスが一覧に表示されます。
- [選択可能なプロセス] ボックスで、「msiexec.exe」選択します。同じ名前のプロセスが複数ありますが、型が「マネージ」のものを選択します。
- [アタッチ] をクリックします。
- プロセスにアタッチできたら、放置状態だったメッセージ ボックスの [OK] をクリックします。すると、カスタム動作の実行が再開され、あらかじめ設定しておいたブレークポイントで処理がストップします。ばんざい。
気になっているのは、デバッグ用にわざわざメッセージ ボックスを表示している点。なんとなく合法的な方法ではないような…。