我有同一个应用程序运行的多个实例。 用户提问可以点击每个实例上的“退出”closures它。
我想添加select“退出所有实例”,这将引起一些小孩的“事件”,通知所有应用程序的实例,他们应该closures。 我不需要随这个事件一起传输任何数据。
使用C#/ .NET在Windows中执行此操作的最好(也是最简单的)方法是什么?
将good'ol WM_CLOSE发送到所有实例…
Process[] processes = Process.GetProcesses(); string thisProcess = Process.GetCurrentProcess().Mainmodulee.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.Mainmodulee.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.GetProcessesByName将让你枚举所有的实例:
http://msdn.microsoft.com/en-us/library/system.diagnostics.process.getprocessesbyname.aspx
那么Process.CloseMainWindow或Process.Close会关闭它们:
http://msdn.microsoft.com/en-us/library/system.diagnostics.process.closemainwindow.aspx http://msdn.microsoft.com/en-us/library/system.diagnostics.process.close.aspx