xin9le.net

Microsoft の製品/技術が大好きな Microsoft MVP な管理人の技術ブログです。

ClickOnceアプリケーションを外部exeから起動する

ClickOnce を使ってアプリケーションを配布している人は減っているような気がしないでもないですが、そうは言っても社内イントラネット環境などではやはり重宝します。そうするとアプリケーション連携などで ClickOnce アプリケーションを別の exe から起動したいケースも出てきます。そんなときに重宝しそうなメモ。

サンプルコード

ClickOnce のアプリケーションを起動するときは以下のようにすると良いでしょう。

public static class ClickOnceApplication
{
    public static void Run(Uri uri)
    {
        if (uri == null)
            throw new ArgumentNullException(nameof(uri));
        ClickOnceApplication.Run(uri.ToString());
    }

    public static void Run(string url)
    {
        if (url == null)
            throw new ArgumentNullException(nameof(url));
        Process.Start(new ProcessStartInfo()
        {
            FileName               = "iexplore.exe",
            Arguments              = url,
            CreateNoWindow         = true,
            RedirectStandardOutput = false,
            WindowStyle            = ProcessWindowStyle.Minimized,
            UseShellExecute        = true,
        });
    }
}

ポイントは、ただの Process.Start(url) ではなく Internet Explorer を間に噛ませるという点です。URL 指定だけにすると既定のブラウザで開こうとするため、既定のブラウザが Google Chrome などになっていると ClickOnce アプリケーション (.application) を単にダウンロードする動きになっていまうからです。Internet Explorer だとインストール画面まで進みます。