none
ClickOnceで配置されたWPFアプリの再起動方法について RRS feed

  • 質問

  • お世話になります。

    WPFアプリを開発し、ClickOnceを使用してネットワーク上のWindowsフォルダに配置して使用しています。
    ソフトウェアの仕様上、途中で自分自身を再起動する必要があり、現在は以下の様なコードで対応しています。

        System.Diagnostics.Process.Start(Application.ResourceAssembly.Location);
        Application.Current.Shutdown();

    このコードでも再起動は行えるのですが、再起動後のアプリはClickOnce方式で起動したアプリとして
    認識されないようで困っています。

    例えば、ClickOnceのデータフォルダを使用するために、以下の様なコードを使用するのですが

        if (ApplicationDeployment.IsNetworkDeployed)
        {
            return ApplicationDeployment.CurrentDeployment.DataDirectory;
        }
        else
        {
            return AppDomain.CurrentDomain.BaseDirectory;
        }

    IsNetworkDeployedプロパティが、再起動後のアプリだとfalseになってしまい
    データフォルダの情報を取得できなかったりしています。
    IsNetworkDeployedプロパティを使用せず、ClickOnceアプリとしてのみ作りこむこともできますが
    そうなると、普段のデバッグ時に支障がでてしまいます。
    (上記の例だと、ローカル上のVisualStadio上で実行すると例外が発生したりします)

    そもそもProcess.Start()時の実行方法に問題があるような気がするのですが
    ClickOnceの仕組みの理解不足もあり、どのように回避したらよいか見つけることができませんでした。
    (起動時のショートカットファイルのパスが分かれば良いような気もしますが、
    それに該当するようなAPIも見つけることができませんでした)

    なにかよい方法が有りましたら教えて下さい。
    よろしくお願いします。


    2015年2月25日 2:35

回答

  • こんにちは。

    System.Windows.Forms.Application.Restart();

    で同じURLで起動されます。(WPF+ClickOnceで確認)

    https://msdn.microsoft.com/ja-jp/library/system.windows.forms.application.restart%28v=vs.110%29.aspx?f=255&MSPPError=-2147217396


    2015年2月25日 3:45
    モデレータ

すべての返信

  • こんにちは
    根本的な解決にはなりませんが、#ifディレクティブとかどうでしょうか。

    デバッグ時に支障のでる部分を回避します。

     #if DEBUG == false
    問題部分
    #endif

    2015年2月25日 3:10
  • こんにちは。

    System.Windows.Forms.Application.Restart();

    で同じURLで起動されます。(WPF+ClickOnceで確認)

    https://msdn.microsoft.com/ja-jp/library/system.windows.forms.application.restart%28v=vs.110%29.aspx?f=255&MSPPError=-2147217396


    2015年2月25日 3:45
    モデレータ
  • inoguchiさん、Tak1waさん、回答有難うございました。

    Tak1waさんご提示の内容で試したところ、問題なくClickOnceアプリとして再起動することが出来ました。
    実は、System.Windows.Forms.Application.Restart()の存在自体は知っていたのですが、
    名前空間が、System.Windows.Formsなので、
    てっきりこれらのクラスはWindowsフォームアプリケーション専用かと勘違いしておりました。
    思い込みはダメですね、やっぱりなんでも試してみないと。(-_-;)

    ありがとうございました。

    2015年2月25日 4:20