Microsoft Visual Studio 2017 Installer で インストール後にアプリケーションを起動したい

インストール後、すぐにアプリケーションを起動するようにしたい。
インストールフォルダに移動してEXEファイルを実行、ショートカットを実行するのが面倒。

前提条件

インストーラークラス を作成

Windows フォームアプリケーション のプロジェクトに インストーラークラス(Installer.cs)を作成する。
アプリケーションの起動は、インストール後の処理なので、Commitメソッドをオーバーライドして、新たなプロセスを開始するように処理を記述する。
AssemblyPath を指定して取得できるパラメーターは、アプリケーションのインストール先のパスになっている。
例)C:\Program Files (x86)\Default Company Name\Setup1\WindowsFormsApp1.exe

using System.Collections;
using System.ComponentModel;
using System.Diagnostics;

namespace  WindowsFormsApp1
{
    [RunInstaller(true)]
    public partial class Installer : System.Configuration.Install.Installer
    {
        public Installer()
        {
            InitializeComponent();
        }

        public override void Commit(IDictionary savedState)
        {
            base.Commit(savedState);
            Process.Start(this.Context.Parameters["AssemblyPath"]);
        }
    }
}

カスタム動作で指定をする

Visual Studio Installer プロジェクトの ファイルシステム > Application Folder に、プライマリ出力で Windows フォームアプリケーション を追加する。
その後、カスタム動作にて、プライマリ出力 Windows フォームアプリケーション(WindowsFormsApp1)を追加する。
Commitメソッドしかオーバーライドしていないが、全てに対して指定を行わないと、うまく動作しなかった。
f:id:kameya_takefumi:20180906152451p:plain
設定完了。
Windows フォームアプリケーション をビルド後に Visual Studio Installer プロジェクト をビルドして、インストールして動作を確認する。

余談

情報を探していると、Visual Studio Installer プロジェクトのカスタム動作で CustomActionData に [TARGETDIR] を指定し、インストーラークラス で、その値を取得して処理を行うパターンが見受けられた。
このやり方はナンセンスすぎるように思える。

Visual Studio Installer プロジェクト で指定されるカスタム値を、別プロジェクトのインストーラークラスが、それをある前提で値を受け取り処理をするのは、依存度が高くて危険すぎる。
結局、その値をゴチャゴチャやって、this.Context.Parameters["AssemblyPath"] で取れる値と同じものを作成していたりする。
動けばいいんですけど、私は許容できないなぁ。