Criando aplicações windows singleInstance

Aplicações singleInstance são aplicações que podem ser rodadas uma única vez, o usuário não pode abrir diversas instancias da aplicação, rodando várias vezes o executável.

 

O VB.NET, através dos recursos do MY, implementa facilmente aplicações singleInstance. Basta nas propriedades do projeto marcarmos a checkbox solicitando isso e ele gera o código para nós.

 

No C#, porém, não temos o recurso do My, consequentemente precisamos nós mesmos programar isso.

 

Para fazer isso devemos utilizar um Mutex. Um Mutex é um objeto do sistema operacional que permite criarmos uma sinalização entre nossas aplicações. Assim sendo, a primeira instância de nossa aplicação abre um Mutex e as instâncias seguintes, vendo que o Mutex já existe, não se iniciam.

 

Devemos fazer isso na Main. Veja:

 

static void Main()

{

Mutex mu = null;

try

{

mu = Mutex.OpenExisting("RUNMEONCE");

}

catch (WaitHandleCannotBeOpenedException)

{

}

 

if (mu == null)

{

mu = new Mutex(true, "RUNMEONCE");

}

else

{

mu.Close();

return;

}

Application.EnableVisualStyles();

Application.SetCompatibleTextRenderingDefault(false);

Application.Run(new Form1());

}