C# .NET内部进程“;事件“;

C# .NET内部进程“;事件“;,c#,.net,windows,ipc,C#,.net,Windows,Ipc,我有同一应用程序的多个实例正在运行。用户可以在每个实例上单击“退出”将其关闭 我想添加“退出所有实例”选项,这将引发一些“事件”,通知应用程序的所有实例它们应该关闭。我不需要随此事件传输任何数据 在Windows中使用C#/.NET执行此操作的最佳(最好是最简单)方法是什么?将好的“ol WM”发送到所有实例附近 Process[] processes = Process.GetProcesses(); string thisProcess = Process.GetCurrentProcess

我有同一应用程序的多个实例正在运行。用户可以在每个实例上单击“退出”将其关闭

我想添加“退出所有实例”选项,这将引发一些“事件”,通知应用程序的所有实例它们应该关闭。我不需要随此事件传输任何数据


在Windows中使用C#/.NET执行此操作的最佳(最好是最简单)方法是什么?

将好的“ol WM”发送到所有实例附近

Process[] processes = Process.GetProcesses();
string thisProcess = Process.GetCurrentProcess().MainModule.FileName;
string thisProcessName = Process.GetCurrentProcess().ProcessName;
foreach (Process process in processes)
{
   // Compare process name, this will weed out most processes
   if (thisProcessName.CompareTo(process.ProcessName) != 0) continue;
   // Check the file name of the processes main module
   if (thisProcess.CompareTo(process.MainModule.FileName) != 0) continue;
   if (Process.GetCurrentProcess().Id == process.Id) 
   {
     // We don't want to commit suicide
     continue;
   }
   // Tell the other instance to die
   Win32.SendMessage(process.MainWindowHandle, Win32.WM_CLOSE, 0, 0);
}

System.Diagnostics.Process类有几种方法可供使用

Process.GetProcessByName将允许您枚举所有实例:

然后Process.CloseMain窗口或Process.Close将关闭它们:


谢谢。CloseMainWindow似乎是Win32的一个很好的替代品。