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.
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
ResponderEliminarGracias por responder y gracias por la recomendación, un saludo.
Eliminargracias por la ayuda
ResponderEliminarpero 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
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.
Eliminargracias 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.
Eliminarsi los creo manualmente después de la instalación no sucede eso
// --- para comprobar si la aplicacion ya esta en ejecucion existen dos metodos:
Eliminarbool 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
private static bool IsExecutingApplication(Process currentProcess)
ResponderEliminar{
var processes = Process.GetProcesses();
return processes.Where(p => p.Id != currentProcess.Id).Any(p => p.ProcessName == currentProcess.ProcessName);
}