2016-07-20 9 views
4

私はC#アプリケーションOutput TypeWindows Applicationに設定されているので、基本的にバックグラウンドで実行されているプロセスです。私はタスクマネージャーでプロセスを見ることができ、私は正常にコマンドラインから終了しようとしているし、私のコードでこの終了を処理することもできます。私はtaskkill /im myprocess.exeを実行し、メッセージがWindowsアプリケーション - handle taskkill

SUCCESSさ:

PID 61で「MyProcess.exe」 プロセスに終了シグナルを送信私の問題は、私はまだ後に、タスクマネージャでプロセスを見ることができるということですこの。それは私が taskkill /fを実行すると終了しますが、プロセスが終了する前にコードを実行する必要があるので、私はそれを望ましくありません。

アプリケーションでこの「終了信号」を処理して、必要な事前終了処理を実行して終了するにはどうすればよいですか?

答えて

1

taskkillが実際に何を参照すればyou will findは、プロセスのメッセージループにWM_CLOSEメッセージを送信します。したがって、このメッセージを処理してアプリケーションを終了する方法を見つける必要があります。

次の小さなテストアプリケーションは、これを行う方法を示しています。あなたは(プロセスがデバッガの外で実行されるように)CTRL +F5ショートカットを使用してVisual Studioから、それを実行する場合は、実際にtaskkill /IM [processname]を使用して、それを閉じることができます。

using System; 
using System.Security.Permissions; 
using System.Windows.Forms; 

namespace TaskKillTestApp 
{ 
    static class Program 
    { 
     [SecurityPermission(SecurityAction.LinkDemand, Flags = SecurityPermissionFlag.UnmanagedCode)] 
     private class TestMessageFilter : IMessageFilter 
     { 
      public bool PreFilterMessage(ref Message m) 
      { 
       if (m.Msg == /*WM_CLOSE*/ 0x10) 
       { 
        Application.Exit(); 
        return true; 
       } 
       return false; 
      } 
     } 

     [STAThread] 
     static void Main() 
     { 
      Application.AddMessageFilter(new TestMessageFilter()); 
      Application.Run(); 
     } 
    } 
} 
+0

これはシームレスに機能しました。 –

関連する問題