漫坊亭

社会の底辺プログラマ

Visual Studio Installer (VS2015) カスタムアクション

visualstudiogallery.msdn.microsoft.com

  1. クラスライブラリプロジェクトを作る
  2. 参照の追加:System.Configuration.Install using System.Configuration.Install;
  3. Installerを継承したクラスを作る
namespace MyInstaller
{
    [RunInstaller(true)]
    public class MyCustomAction : Installer
    {
        /// <summary>Installs the specified state saver.</summary>
        public override void Install(IDictionary stateSaver)
        {
            base.Install(stateSaver);
            MessageBox.Show($"id={Process.GetCurrentProcess().Id}", "MyCustomAction.Install");

            // ここに処理を書く
        }

        // public override void Uninstall(IDictionary savedState)
        // public override void Commit(IDictionary savedState)
        // public override void Rollback(IDictionary savedState)
    }
}
  1. カスタム動作に、作成したDLLを指定する f:id:jfactory:20160209111854p:plain f:id:jfactory:20160209111936p:plain

  2. デバッグするには

f:id:jfactory:20160209112149p:plain
ソリューションエクスプローラ右クリックからインストールを選択する インストールを進めるとダイアログが出るので、「出したまま」デバッグ~プロセスにアタッチ(msiexec.exeとプロセスIDを確認する)
f:id:jfactory:20160209113543p:plain f:id:jfactory:20160209113500p:plain MessageBox.Showの次の行にブレークポイントを置いて、ダイアログを閉じる。

  1. インストーラからデータを渡すには

f:id:jfactory:20160209113806p:plain カスタム動作のプロパティで、CustomActionDataを設定する。

f:id:jfactory:20160209114046p:plain

こんなのが使える。
Property Reference (Windows)

  1. インストールを失敗させるには System.Configuration.Install.InstallExceptionを投げれば良い。 (ロールバックが呼ばれる)