Wed
Jan
25
2006
Todos sabemos que, normalmente, el punto de arranque de una aplicación WinForms es la función Main(). Un pequeño truco que nos puede quitar muchos quebraderos de cabeza más adelante es
impedir activamente que una aplicación pueda ejecutarse más de una vez. Para ello, podemos usar el siguiente código:
/// <summary>
///Punto de entrada de la aplicación
/// </summary>
[STAThread]
static void Main()
{
if(Process.GetProcessesByName(
Process.GetCurrentProcess().ProcessName).GetUpperBound(0)==0)
{
Application.Run(new frmMain());
}
}
Colorized by: CarlosAg.CodeColorizer
La clave de todo esto está en la clase
Process. Perteneciente al espacio de nombres System.Diagnostics, una de sus utilidades es obtener el nombre del proceso actual (mediante Process.GetCurrentProcess().ProcessName, que devuelve un tipo string) y otra es la de obtener todos los procesos de un determinado nombre (Process.GetProcessesByName, que devuelve un array de objetos Process). Efectivamente, lo que hace el if() en esa línea es buscar el proceso que estamos arrancando en la lista de procesos en uso en la máquina y si
no lo encuentra, o lo que es lo mismo el tamaño del array devuelto por GetProcessesByName es 0, arranca la aplicación.