Visual Studio Installer に関するあれこれ

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]が追加されます。

[Visual Studio] プロジェクトの種類に「Visual Studio Installer」が追加されている
プロジェクトの種類に「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 です)。

[Visual Studio] デバッグしたい行の上に、メッセージボックスを表示する処理を追加
デバッグしたい行の上に、メッセージボックスを表示する処理を追加

次に、プロジェクトをビルドして、できあがったインストーラーをエクスプローラーから普通に実行します。インストーラーのウィザードを進めていくと、カスタム動作が実行されるタイミングで、メッセージ ボックスが表示されます。ただし、この時点ではまだ[OK]を押しません。

カスタム動作実行中にメッセージボックスが表示される
カスタム動作実行中にメッセージボックスが表示される

Visual Studio の[デバッグ]メニュー>[プロセスにアタッチ…]を押します。すると、[プロセスにアタッチ]ダイアログ ボックスが表示されますので、図の手順で操作します。これで、Visual Studio からインストーラーのプロセスにアタッチできます。

[Visual Studio] インストーラーのプロセスにアタッチ
インストーラーのプロセスにアタッチ
  1. [すべてのユーザーからのプロセスを表示する]を ON にします。こうすることで、SYSTEM ユーザーのプロセスが一覧に表示されます。
  2. [選択可能なプロセス]ボックスで、msiexec.exe を選択します。同じ名前のプロセスが複数ありますが、型が「マネージ」のものを選択します。
  3. [アタッチ]を押します。

プロセスにアタッチできたら、放置状態だったメッセージ ボックスの[OK]を押します。すると、カスタム動作の実行が再開され、あらかじめ設定しておいたブレークポイントで処理が一時停止します。

[Visual Studio] ブレークポイントで処理が一時停止した
ブレークポイントで処理が一時停止した

デバッグ目的でわざわざメッセージ ボックスを表示するのは少し無理やり感もありますが、他によい方法を見つけられませんでした。

kpdn

お寿司とゲームと動物が好きな、フリーランスのエンジニアです。フロントエンドからインフラまで日々奮闘中です。最近は物忘れがどんどんがひどくなってきました。

コメントを残す