Pergunta

Eu tenho várias instâncias do mesmo aplicativo em execução. O usuário pergunte pode clicar em "Sair" em cada instância para desligá-lo.

Eu gostaria de adicionar a opção de "Feche todas as instâncias", o que elevará um garoto de "evento" que notifica todas as instâncias do aplicativo que deve fechar. Eu não preciso de transportar todos os dados juntamente com este evento.

Qual é a melhor (e de preferência mais simples) maneira de fazer isso no Windows usando C # /. NET?

Foi útil?

Solução

Enviar a WM_CLOSE good'ol a todas as instâncias ...

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);
}

Outras dicas

A classe System.Diagnostics.Process tem vários métodos que você pode usar.

Process.GetProcessesByName vai deixar você enumerar todas as instâncias:

http://msdn.microsoft.com /en-us/library/system.diagnostics.process.getprocessesbyname.aspx

então Process.CloseMainWindow ou Process.Close vai fechá-los:

http://msdn.microsoft.com /en-us/library/system.diagnostics.process.closemainwindow.aspx http://msdn.microsoft.com/en- us / library / system.diagnostics.process.close.aspx

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top