ClickOnceアプリケーションを他から起動する方法(その2)

以前の日記でClickOnceアプリケーションを外部から起動する方法を紹介したが、若干気に入らない点があった。

コンソールアプリケーションやGUIアプリケーションからも実行できるので、中々良いかな、と思ったのだが起動する度に一瞬ブラウザウインドウが表示されるので、これをなんとかしないと駄目だな。

これに関してだが、以下の方法で、一瞬表示されるブラウザウインドウを抑制できることが判った。

System.Diagnostics.ProcessStartInfo startInfo = 
    new System.Diagnostics.ProcessStartInfo("IExplore.EXE", @"http://FooHost/FooApp/Foobar.application");
startInfo.WindowStyle = System.Diagnostics.ProcessWindowStyle.Hidden;
System.Diagnostics.Process.Start(startInfo);

シェル起動ではなく、InternetExplorerを直接指定してウインドウスタイルを"hidden"にするだけである。これでバッチファイル等からClickOnceアプリケーションを起動しても、ブラウザウインドウがいちいち開くことは無い。
この方法の問題点はInternetExplorerのプロセス名が変更されたらおしまい、ということである。
すでにローカルにインストールされている場合は、以前のエントリにコメントを頂いたとおり、拡張子”.appref-ms”を使っても良い。その場合はClickOnceローダであるdfsvc.exeがシェル起動プロセスとなるため、ウインドウの表示抑制は不要である。