La forma recomendada de hacer esto es con un mutex sistema.
bool createdNew;
using(var mutex = new System.Threading.Mutex(true, "MyAppName", out createdNew))
{
if (createdNew)
// first instance
Application.Run();
else
MessageBox.Show("There is already an instace running");
}
El primer parámetro para el cúter Mutex le dice que cree crear un mutex amplio para este hilo. Si el Mutex ya existe, devolverá false
a través del tercer parámetro.
actualización
Dónde poner esto? Pondré esto en program.cs. Si lo coloca en form_load, deberá mantener el mutex durante el tiempo de vida de la aplicación (tener el mutex como miembro en el formulario) y liberarlo manualmente en el formulario de descarga.
Cuanto antes llame a esto, mejor, antes de que la otra aplicación abra conexiones DB, etc. y antes de que se creen recursos para formularios/controles etc.
duplicados de http://stackoverflow.com/questions/3211529/net-4-single-application-instance –