Quieres algo de código en serio? Aquí está.
var exists = System.Diagnostics.Process.GetProcessesByName(System.IO.Path.GetFileNameWithoutExtension(System.Reflection.Assembly.GetEntryAssembly().Location)).Count() > 1;
Esto funciona para cualquier aplicación (cualquier nombre) y se convertirá en true
si hay otra instancia en ejecución de la misma aplicación.
Editar: para solucionar sus necesidades, puede utilizar cualquiera de estos:
if (System.Diagnostics.Process.GetProcessesByName(System.IO.Path.GetFileNameWithoutExtension(System.Reflection.Assembly.GetEntryAssembly().Location)).Count() > 1) return;
de su método principal para salir del método ... O
if (System.Diagnostics.Process.GetProcessesByName(System.IO.Path.GetFileNameWithoutExtension(System.Reflection.Assembly.GetEntryAssembly().Location)).Count() > 1) System.Diagnostics.Process.GetCurrentProcess().Kill();
que matará el proceso actualmente cargar instantáneamente.
es necesario agregar una referencia a System.Core.dll para el método de extensión .Count()
. Alternativamente, puede usar la propiedad .Length
.
Ver http://stackoverflow.com/questions/94274/return-to-an-already-open-application-when-a-user-tries-to-open-a-new-instance y HTTP : //stackoverflow.com/questions/184084/how-to-force-c-net-app-to-run-only-one-instance-in-windows – ChrisF
http://www.codeproject.com/KB/cs /restricting_instances.aspx –
@Tim Schmelter Gracias, pero esto es para una aplicación de GUI, la mía es una aplicación de consola – Tom