Ejecutar una sólo instancia de la aplicación
Artículo por Club Developers · 09 May 2006
2018 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.