문제

동일한 응용 프로그램이 실행중인 여러 인스턴스가 있습니다. 사용자 Ask는 각 인스턴스에서 "Quit"을 클릭하여 종료 할 수 있습니다.

"모든 인스턴스를 종료"하기 위해 선택을 추가하고 싶습니다. 이는 "이벤트"의 아이를 키우고 응용 프로그램의 모든 인스턴스를 닫아야 할 "이벤트"를 높입니다. 이 이벤트와 함께 데이터를 전송할 필요가 없습니다.

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