none
プログラムからClickOnceアプリケーションを起動・停止する RRS feed

  • 質問

  • お世話になっております。ChipStarです。

    プログラム中からClickOnceアプリケーションを起動したり、停止したりしたいと思っています。
    現在、起動方法を調べた結果、以下の2つの方法を見つけたのですが、これらの方法で起動したアプリケーションを同じくプログラム中から停止する方法がわかりません。
    ご教授願えないでしょうか。

    起動方法①
    System.Windows.Forms.WebBrowser browser = new System.Windows.Forms.WebBrowser();
    browser.Url = new System.Uri(http://XXXXXXXX/XXX/XXX.application);

    起動方法②
    System.Diagnostics.Process.Start(http://XXXXXXXX/XXX/XXX.application);
    *この起動方法だと、アプリケーション起動まえに一瞬IEが立ち上がってくるため、あまり使えないと思っています。

    以上、宜しくお願い致します。
    2009年6月11日 7:24

回答

  • ChipStarさん、こんにちは。
    フォーラムオペレータの高橋春樹です。
    MSDNフォーラムのご利用ありがとうございます。

    Click Onceアプリケーションの停止方法について、すこし調べてみました。
    既にご存知かもしれませんが、CloseMainWindowを利用する方法は如何でしょうか?
    CloseMainWindowは、システム メニューを使用してアプリケーションのメイン ウィンドウを閉じる時と、同じ動作になります。

    Process.CloseMainWindow メソッド
    http://msdn.microsoft.com/ja-jp/library/system.diagnostics.process.closemainwindow.aspx

    起動方法①の停止

                System.Diagnostics.Process[] aProcess = System.Diagnostics.Process.GetProcessesByName("SampleApplication");
                foreach (System.Diagnostics.Process process in aProcess){
                    process.CloseMainWindow();
                    process.Close();
                }

    その他、プロセス名を指定してkillするというやり方もあるのですが
    アプリケーションの都合を考えずに終了させる事になるので、あまりお勧めはしません(^-^;)

    この情報が少しでも皆様のお役に立てれば幸いと思っています。

    もし、他に良い方法がありましたら、
    ご投稿の程、よろしくお願いします!


    マイクロソフト株式会社 フォーラム オペレータ 高橋春樹
    2009年6月23日 2:41
  • 起動については次の記事が参考になると思います。

     ClickOnceアプリケーションを他から起動する方法 - Kazzzの日記
     http://d.hatena.ne.jp/Kazzz/20060326/p1

     ClickOnceアプリケーションを他から起動する方法(その2) - Kazzzの日記
     http://d.hatena.ne.jp/Kazzz/20060404/p2
    • 回答としてマーク sk7474 2009年7月28日 7:33
    2009年6月23日 10:37
  • ChipStarさん、こんにちは。

    既にご存知かも知れませんが、プロセスIDを使えば厳密にプロセスを引き当てる事ができます。

    System.Diagnostics.Process[] aProcess = System.Diagnostics.Process.GetProcessesByName("SampleApplication");
    foreach (System.Diagnostics.Process process in aProcess){
        if(process.id == 終了させたいプロセスのID){
            process.CloseMainWindow();
            process.Close();

        }

    }

    ClickOnceアプリケーション起動時になんとかプロセスIDを取得すれば、
    終了したいプロセスを終了させる事ができるんですが・・・・
    そのプロセスIDの取得が難しそうですね。

    どなたか良いアイデアのある方がいらっしゃいましたら、ご投稿の程、
    よろしくお願いします。


    マイクロソフト株式会社 フォーラム オペレータ 高橋春樹
    • 回答としてマーク sk7474 2009年7月28日 7:33
    2009年6月26日 8:27

すべての返信

  • ChipStarさん、こんにちは。
    フォーラムオペレータの高橋春樹です。
    MSDNフォーラムのご利用ありがとうございます。

    Click Onceアプリケーションの停止方法について、すこし調べてみました。
    既にご存知かもしれませんが、CloseMainWindowを利用する方法は如何でしょうか?
    CloseMainWindowは、システム メニューを使用してアプリケーションのメイン ウィンドウを閉じる時と、同じ動作になります。

    Process.CloseMainWindow メソッド
    http://msdn.microsoft.com/ja-jp/library/system.diagnostics.process.closemainwindow.aspx

    起動方法①の停止

                System.Diagnostics.Process[] aProcess = System.Diagnostics.Process.GetProcessesByName("SampleApplication");
                foreach (System.Diagnostics.Process process in aProcess){
                    process.CloseMainWindow();
                    process.Close();
                }

    その他、プロセス名を指定してkillするというやり方もあるのですが
    アプリケーションの都合を考えずに終了させる事になるので、あまりお勧めはしません(^-^;)

    この情報が少しでも皆様のお役に立てれば幸いと思っています。

    もし、他に良い方法がありましたら、
    ご投稿の程、よろしくお願いします!


    マイクロソフト株式会社 フォーラム オペレータ 高橋春樹
    2009年6月23日 2:41
  • 起動については次の記事が参考になると思います。

     ClickOnceアプリケーションを他から起動する方法 - Kazzzの日記
     http://d.hatena.ne.jp/Kazzz/20060326/p1

     ClickOnceアプリケーションを他から起動する方法(その2) - Kazzzの日記
     http://d.hatena.ne.jp/Kazzz/20060404/p2
    • 回答としてマーク sk7474 2009年7月28日 7:33
    2009年6月23日 10:37
  • 高橋さん

    返信ありがとうございます。
    起動②の方法であれば、KillよりはCloseMainWindowを利用する方がよさそうですね。
    しかし、現在作成中のアプリケーションでは、同一プロセス名のアプリケーションが複数起動するため、起動したプロセスを厳密に引き当てる事が難しい状況です。
    起動時間で識別するのも微妙そうですし。。。
    プロセス名以外で、厳密にプロセスを引き当てる方法ってあるのでしょうか?

    2009年6月24日 1:28
  • totojoさん

    返信ありがとうございます。
    起動②の方法を最小する際に一瞬起動するIEのウィンドウに悩んでいたのですが、Kazzzさんの日記にあった、IEのプロセスを直接起動する方法で回避できるとは知りませんでした。
    有用な情報をありがとうございました。

    2009年6月24日 1:33
  • ChipStarさん、こんにちは。

    既にご存知かも知れませんが、プロセスIDを使えば厳密にプロセスを引き当てる事ができます。

    System.Diagnostics.Process[] aProcess = System.Diagnostics.Process.GetProcessesByName("SampleApplication");
    foreach (System.Diagnostics.Process process in aProcess){
        if(process.id == 終了させたいプロセスのID){
            process.CloseMainWindow();
            process.Close();

        }

    }

    ClickOnceアプリケーション起動時になんとかプロセスIDを取得すれば、
    終了したいプロセスを終了させる事ができるんですが・・・・
    そのプロセスIDの取得が難しそうですね。

    どなたか良いアイデアのある方がいらっしゃいましたら、ご投稿の程、
    よろしくお願いします。


    マイクロソフト株式会社 フォーラム オペレータ 高橋春樹
    • 回答としてマーク sk7474 2009年7月28日 7:33
    2009年6月26日 8:27
  • こんにちは。中川俊輔です。

    totojoさん、回答ありがとうございます。

    ChipStarさん、フォーラムのご利用ありがとうございます。
    その後いかがでしょうか?Click Onceアプリケーションの起動、終了はうまくいくようになりましたか?
    有用な情報と思われたため、勝手ながらtotojoさんおよび高橋の回答へ回答マークをつけさせていただきました。

    今後ともフォーラムをよろしくお願いします。
    それでは!
    マイクロソフト株式会社 フォーラム オペレータ 中川 俊輔
    2009年7月28日 7:36