sábado, 20 de marzo de 2010

Instancia unica de aplicacion


Vamos a ver el caso de como controlar que se este ejecutando una única instancia de una determinada aplicación con Visual Studio 2005. En particular con VB.NET 2005.

Tenemos 3 caminos a seguir (no voy a poner todo el código aquí pero si los links adonde esta el ejemplo completo).

1.- Verificar cuantos procesos de nuestra aplicación están corriendo basandonos en el nombre de proceso.

If Process.GetProcessesByName(Process.GetCurrentProcess.ProcessName).Length > 1 Then
messagebox.show("Ya existe una instancia de la aplicación")
Application.Exit()
End If

Con Process.GetProcessesByName traemos los procesos que corren con el nombre Process.GetCurrentProcess.ProcessName (el de nuestra aplicacion justamente), si trae mas de uno es porque ya hay otra corriendo y entonces salimos (Application.Exit()).

Se pueden ver ejemplos en los siguientes links:
http://www.freevbcode.com/ShowCode.Asp?ID=5333
http://www.elguille.info/colabora/puntonET/anibal_appPrevinstance.htm

El inconveniente de este procedimiento es que si se renombra el ejecutable pueden correr instancias simultaneas (cada nombre de ejecutable tendra un nombre de proceso distinto).

2.- Utilizando Mutex

Se intenta ganar acceso a un Mutex con nombre (la diea es que sea exclusivo de nuestra aplicación), si no se logra es porque alguien lo tomo antes, o sea.. ya existe una instancia de nmuestra aplicación.

http://www.freevbcode.com/ShowCode.Asp?ID=5845

3.- Simple pero efectivo:
En el proyecto de Visual Studio doble clic en My Proyect -> Pestaña Aplicación -> check en la opción "Convertir Aplicación de instancia única"

http://www.canalvisualbasic.net/foro/visual-basic-net/instancia-unica-de-aplicacion-12358/

Yo me quedo con la 3. Como diría un amigo: "rústico pero efectivo" :)

No hay comentarios: