// Pinvoke Quit internal const uint WM_QUIT = 0x12; [DllImport("user32.dll", EntryPoint = "PostThreadMessage", CharSet = CharSet.Unicode)] [return: MarshalAs(UnmanagedType.Bool)] internal static extern bool PostThreadMessage(int idThread, uint Msg, IntPtr wParam, IntPtr lParam); foreach (Process process in Process.GetProcessesByName("APPNAME")) { if (process.Id != Process.GetCurrentProcess().Id) { try { foreach (ProcessThread thread in process.Threads) { PostThreadMessage(thread.Id, WM_QUIT, IntPtr.Zero, IntPtr.Zero); } } catch (Exception ex) { ErrorHandler(ex); } } } // or pinvoke closing internal const int WM_CLOSE = 0x0010; [DllImport("user32.dll", CharSet = CharSet.Auto)] internal static extern IntPtr SendMessage(IntPtr hWnd, UInt32 Msg, IntPtr wParam, IntPtr lParam); NativeMethods.SendMessage(hWindow, NativeMethods.WM_CLOSE, IntPtr.Zero, IntPtr.Zero); // or Process Process[] processes = Process.GetProcessesByName("APPNAME"); foreach (Process process in processes) { if (process.Id != Process.GetCurrentProcess().Id) { process.CloseMainWindow(); } }