Ejecutar una sólo instancia de la aplicación
Artículo por Club Developers · 06 mayo 2006
3145 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.
csharp
using System.Threading; class SingleInstanceApp : IDisposable { // Mutex Mutex _siMutex; bool _siMutexOwned; // Constructor public SingleInstanceApp(string name) { _siMutexOwned = false; } // Controla su la app está lanzada public bool IsRunning() { // cogemos el mutex // Si _siMutexOwned es tru, la aplicación coge el mutex ya que está "libre" // Sino, el mutex ya ha sido adquirido en una ejecución anterior _siMutexOwned = _siMutex.WaitOne(0, true); return !(_siMutexOwned); } // IDisposable public void Dispose() { // liberación el mutexsi ha sido adquirido if (_siMutexOwned) _siMutex.ReleaseMutex(); } }
Para usar la clase, simplemente tendremos que hacer lo siguiente: en el Main de nuestra aplicación....
csharp
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.