none
Windowsアプリから起動した別のアプリを停止させるには? RRS feed

  • 質問

  • お世話になります。

     

    以下の方法で、Winアプリからほかのアプリを起動できる事は分かりました。

     

       private void button1_Click(object sender, EventArgs e)

       {

          Process proc = new Process();

          proc.StartInfo.FileName = "C:\\test.exe";

          proc.Start();

       }

     

    さて、このように起動したアプリを停止する方法が良く分かりません。

     

       proc.Close();

       proc.CloseMainWindow();

       proc.Dispose();

       proc.Kill();

       proc.Refresh();

     

    などの違いが良く分かりません。

     

    子プロセスを確実に停止させる方法をご教授頂きたく、よろしくお願いします。

     

     

    2008年12月2日 13:28

回答

  • 本当に、問答無用で停止させて良いのですか?

    どんな場合でも問題ないのですか?

    終了して欲しい旨をやんわりと伝えて、子プロセスに任せるといった手法はとれないのでしょうか?

     

     

    例えば、子プロセスがユーザに対して保存を要求しており、名前をつけて保存のダイアログを表示している状態で、無理矢理親プロセスから閉じても問題ないのでしょうか?

    また、保存以外でも、後始末の処理とか色々と問題があるパターンが考えられます。

    2008年12月2日 14:57
    モデレータ
  • 早速、ありがとうございます。

    説明が不十分なため、色々とご心配いただき恐縮です。

     

    この子プロセスは出来合いのもので、ユーザーとのやり取りなどは一切なく、

    お決まりの処理を行うだけのものです。

    所がその処理につまづいた場合、親プロセスへエラーを返す仕掛けがなく、

    ”だんまり”を決め込んでしまいます。(GUIにメッセージを出します)

    こんな状態になるのは経験的に他の方法で確認ができるので、そんな時に

    無理矢理停止させる事を考えています。

     

    まぁ、身内でツール的な使用のみを考えており、少々強引ですがこんな

    方法で乗り切ろうと思っています。

    併せて、この辺りの勉強もかねて質問をさせて頂いています。

     

    どうぞ、よろしくお願いします。

     

     

    2008年12月2日 15:59
  •  おおつの井上です。 さんからの引用
    proc.Close();

    proc.Dispose();

     

    これらは Process クラスのインスタンスの後始末であって呼び出し先プロセスを Close、Dispose するという意味ではありません。

     

    proc.CloseMainWindow();

     

    これは単語のまんまで、メイン ウィンドウを Close することでプロセスの終了を試みる方法です。

     

    proc.Refresh();

     

    ・・・この質問内容であれば、とりあえずリファレンスを見た方が早いです。

     

    子プロセスを確実に停止させる方法をご教授頂きたく、よろしくお願いします。

     

    であれば、

     

    proc.Kill();

     

    になります。

    2008年12月2日 16:53
  • こんばんは!(^^)!ふ~です。

     

    ご参考資料です。

    ◇他のプログラムを強制終了する

    http://jeanne.wankuma.com/tips/csharp/process/kill.html

     

    2008年12月2日 17:04

すべての返信

  • 本当に、問答無用で停止させて良いのですか?

    どんな場合でも問題ないのですか?

    終了して欲しい旨をやんわりと伝えて、子プロセスに任せるといった手法はとれないのでしょうか?

     

     

    例えば、子プロセスがユーザに対して保存を要求しており、名前をつけて保存のダイアログを表示している状態で、無理矢理親プロセスから閉じても問題ないのでしょうか?

    また、保存以外でも、後始末の処理とか色々と問題があるパターンが考えられます。

    2008年12月2日 14:57
    モデレータ
  • 早速、ありがとうございます。

    説明が不十分なため、色々とご心配いただき恐縮です。

     

    この子プロセスは出来合いのもので、ユーザーとのやり取りなどは一切なく、

    お決まりの処理を行うだけのものです。

    所がその処理につまづいた場合、親プロセスへエラーを返す仕掛けがなく、

    ”だんまり”を決め込んでしまいます。(GUIにメッセージを出します)

    こんな状態になるのは経験的に他の方法で確認ができるので、そんな時に

    無理矢理停止させる事を考えています。

     

    まぁ、身内でツール的な使用のみを考えており、少々強引ですがこんな

    方法で乗り切ろうと思っています。

    併せて、この辺りの勉強もかねて質問をさせて頂いています。

     

    どうぞ、よろしくお願いします。

     

     

    2008年12月2日 15:59
  •  おおつの井上です。 さんからの引用
    proc.Close();

    proc.Dispose();

     

    これらは Process クラスのインスタンスの後始末であって呼び出し先プロセスを Close、Dispose するという意味ではありません。

     

    proc.CloseMainWindow();

     

    これは単語のまんまで、メイン ウィンドウを Close することでプロセスの終了を試みる方法です。

     

    proc.Refresh();

     

    ・・・この質問内容であれば、とりあえずリファレンスを見た方が早いです。

     

    子プロセスを確実に停止させる方法をご教授頂きたく、よろしくお願いします。

     

    であれば、

     

    proc.Kill();

     

    になります。

    2008年12月2日 16:53
  • こんばんは!(^^)!ふ~です。

     

    ご参考資料です。

    ◇他のプログラムを強制終了する

    http://jeanne.wankuma.com/tips/csharp/process/kill.html

     

    2008年12月2日 17:04
  • 皆さん、ご回答ならびに参考資料など頂きありがとうございました。

     

    今後とも、どうぞ宜しくお願いいたします。

    2008年12月2日 17:18