Solución:
¿Quieres un código 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 otro instancia en ejecución de lo mismo solicitud.
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 Main 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á al instante el proceso de carga actual.
Necesita agregar una referencia a System.Core.dll Para el .Count()
método de extensión. Alternativamente, puede utilizar el .Length
propiedad.
No está seguro de lo que quiere decir con ‘el programa’, pero si desea limitar su aplicación a una instancia, puede usar un Mutex para asegurarse de que su aplicación no se esté ejecutando.
[STAThread]
static void Main()
{
Mutex mutex = new System.Threading.Mutex(false, "MyUniqueMutexName");
try
{
if (mutex.WaitOne(0, false))
{
// Run the application
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
Application.Run(new MainForm());
}
else
{
MessageBox.Show("An instance of the application is already running.");
}
}
finally
{
if (mutex != null)
{
mutex.Close();
mutex = null;
}
}
}
Aquí hay algunas buenas aplicaciones de muestra. A continuación se muestra una forma posible.
public static Process RunningInstance()
{
Process current = Process.GetCurrentProcess();
Process[] processes = Process.GetProcessesByName (current.ProcessName);
//Loop through the running processes in with the same name
foreach (Process process in processes)
{
//Ignore the current process
if (process.Id != current.Id)
{
//Make sure that the process is running from the exe file.
if (Assembly.GetExecutingAssembly().Location.
Replace("https://foroayuda.es/", "\") == current.MainModule.FileName)
{
//Return the other process instance.
return process;
}
}
}
//No other instance was found, return null.
return null;
}
if (MainForm.RunningInstance() != null)
{
MessageBox.Show("Duplicate Instance");
//TODO:
//Your application logic for duplicate
//instances would go here.
}
Muchas otras formas posibles. Consulte los ejemplos para conocer las alternativas.
El primero.
Segundo.
El tercero
EDITAR 1: Acabo de ver su comentario de que tiene una aplicación de consola. Eso se discute en la segunda muestra.