Ejecutar una sólo instancia de la aplicación
Artículo por Club Developers · 09 mayo 2006
2501 vistas
Puede que queramos evitar ejecutar más de una vez nuestra aplicación. Veamos una pequeña clase que en el momento de la ejecución se asegura que no exista ninguna otra ejecutándose.
Esta clase usa un objeto mutex visible a los demás procesos.
Para usar la clase, simplemente tendremos que hacer lo siguiente: en el Main de nuestra aplicación....
Importante:
Si una aplicación lambda en ejecución crea un mutex que tenga el mismo nombre que el de nuestra aplicación, ésta no podrá ser ejecutada. Será preferible, pues, escoger un nombre complejo para nuestro mutex.
Esta clase usa un objeto mutex visible a los demás procesos.
vbnet
Imports System.Threading Class SingleInstanceApp Implements IDisposable Private _siMutex As Mutex Private _siMutexOwned As Boolean Public Sub New(ByVal name As String) _siMutex = New Mutex(False, name) _siMutexOwned = False End Sub Public Function IsRunning() As Boolean _siMutexOwned = _siMutex.WaitOne(0, True) Return Not (_siMutexOwned) End Function Public Sub Dispose() Implements System.IDisposable.Dispose If _siMutexOwned Then _siMutex.ReleaseMutex() End If End Sub End Class
Para usar la clase, simplemente tendremos que hacer lo siguiente: en el Main de nuestra aplicación....
vbnet
Shared Sub Main() Dim app As SingleInstanceApp = New SingleInstanceApp("{123456789 - ABCD - EFEG - XXXX}") Try If app.IsRunning Then MessageBox.Show("Application déjà lancée") Else Application.Run(New Form1) End If Finally CType(app, IDisposable).Dispose() End Try End Sub
Importante:
Si una aplicación lambda en ejecución crea un mutex que tenga el mismo nombre que el de nuestra aplicación, ésta no podrá ser ejecutada. Será preferible, pues, escoger un nombre complejo para nuestro mutex.


