質問

同じアプリケーションの複数のインスタンスが実行されています。ユーザーは、「終了」をクリックすることができます。各インスタンスでシャットダウンします。

「Quit All Instances」に選択肢を追加します。これにより、「event」の子が発生します。これにより、アプリケーションのすべてのインスタンスを閉じる必要があることが通知されます。このイベントとともにデータを転送する必要はありません。

C#/。NETを使用してWindowsでこれを行うための最良の(できれば最も単純な)方法は何ですか?

役に立ちましたか?

解決

すべてのインスタンスにgood'ol WM_CLOSEを送信...

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.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

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top