Verificar si una aplicación ya se encuentra Abierta

Uno de los primeros inconvenientes cuando empezamos a programar en c# aplicaciones mas completas es que necesitamos que los usuarios no puedan abrir mas de una vez una aplicación que ya se encuentra abierta, para realizar este proceso existen varias formas de hacerlo, ya sea importando una de las APIS de Windows que lo verifica o crear un método para poder verificar si se esta ejecutando un proceso previo que cumple con las características de nuestro programa, esta es la forma que utilizaremos ya que el importar un API de Windows evitara que nuestra aplicación pueda funcionar en Linux o cualquier otros S.O, esto lo podemos hacer de la siguiente forma.
Primero que nada tendremos que tener creada la clase Program.cs que ya a esta altura debemos de saber que es la clase principal donde ira ubicado el método Main de nuestra aplicación, accesamos al código y creamos un método que contenga la siguiente estructura:



Este método almacenara en un arreglo información sobre los procesos que se están ejecutando,  y mas en especifico sobre nuestro proceso, para después recorrer el arreglo y verificar si nuestro proceso se encuentra en ejecución si es así nos regresara Verdadero , en caso contrario falso, lo único que nos falta es agregar el uso del método, en el método Main.


De esta forma podremos Hacer esa comprobación para nuestras aplicaciones, espero te haya sido de utilidad saludos.

Comentarios

  1. util pero te falto poner que debemos poner el using arriba de using System.Diagnostics; ya que sino, no correra para los que no lo sabian

    ResponderEliminar
    Respuestas
    1. Gracias por responder y gracias por la recomendación, un saludo.

      Eliminar
  2. gracias por la ayuda
    pero cómo puedo evitar que al correr la aplicación por segunda ocasión me aparezca el windows installer de nuevo como si fuera a ejecutar el instalador este problema también se me presenta cuándo la PC se apaga o se corta la energía mientras la aplicación se esta ejecutando

    ResponderEliminar
    Respuestas
    1. La verdad hasta el momento no he usado el Windows Installer, los instaladores para mis aplicaciones por motivo de que son aplicaciones distribuidas los hago utilizando ClickOnce necesitaría conocer primero el porque pasa eso.

      Eliminar
    2. gracias por responder, me eh fijado que solo pasa con los accesos directos del resultado principal del proyecto creados en la carpeta de escritorio por ejemplo.
      si los creo manualmente después de la instalación no sucede eso

      Eliminar
    3. // --- para comprobar si la aplicacion ya esta en ejecucion existen dos metodos:
      bool enEjecucion;
      // comprobando la cantidad de elementos del array
      enEjecucion = Process.GetProcessesByName(Process.GetCurrentProcess().ProcessName).Length > 1;
      // comprobando el límite superior del array
      enEjecucion = Process.GetProcessesByName(Process.GetCurrentProcess().ProcessName).GetUpperBound(0) > 0;
      Visto en http://www.elguille.info/NET/dotnet/prevInstance2.htm
      Espero que sirva:
      Andrés

      Eliminar
  3. private static bool IsExecutingApplication(Process currentProcess)
    {
    var processes = Process.GetProcesses();
    return processes.Where(p => p.Id != currentProcess.Id).Any(p => p.ProcessName == currentProcess.ProcessName);
    }

    ResponderEliminar

Publicar un comentario

Entradas populares de este blog

Llenar un DropdownList con Datos ASP.NET C#

Añadir Items a un ListBox desde un Control Textbox C#

Crear un DataTable desde Codigo