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