문제
동일한 응용 프로그램이 실행중인 여러 인스턴스가 있습니다. 사용자 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
제휴하지 않습니다 StackOverflow