Abrir o programa apenas uma vez
Detecta e evita abrir dois programas ao mesmo tempo da mesma aplicação.
Olá pessoal, hoje gostaria de dar mais uma dica para quem programa na plataforma Windows Form. O que vou falar aqui é simples e útil no dia a dia. O precisa ser feita a verificação de processos dentro do sistema operacional. Esse processo pode ser pego de várias maneiras, vou mostrar duas mais eficientes. O objetivo do artigo é verificar se o programa já está rodando ou em funcionamento dentro do computador. Se estiver funcionando, o mesmo não pode abrir outra tela.
Usado: Visual Studio 2010, C#.NET, Windows Form.
if (System.Diagnostics.Process.GetProcessesByName("nome-projeto").Length >= 2) { MessageBox.Show("Atenção: O Aplicativo já está aberto no seu computador.", "Mensagem", MessageBoxButtons.OK, MessageBoxIcon.Stop, MessageBoxDefaultButton.Button1); Application.Exit(); return; }
|
Code 1.1
A primeira verificação, como mostrado no Code 1.1, é pego diretamente pelo nome usando o método do framework chamado GetProcessesByName. A verificação é feita logo no inÃcio do aplicativo, geralmente no Load do primeiro formulário.
Todo o processo existente na máquina, o programa pode pegar passando apenas o nome do programa ou projeto. Geralmente o nome do projeto sem a extensão .exe pode ser buscada sem qualquer problema. O segredo para funcionar sem qualquer problema é o Length >=2, isso porque no momento, já existe um programa aberto e ao clicar novamente, dois processos serão abertos (quando falo em processos, digo o próprio programa .exe).
Note que, uma mensagem é mostrada na tela e o passo seguinte é finalizar o aplicativo com o Application.Exit(); e return. Segunda maneira A segunda maneira de pegar processos da máquina e verificar se existe algum processo funcionando, é utilizando for. Para isso, gerei um array e percorri o mesmo. (Code 1.2)
System.Diagnostics.Process[] processos; processos = System.Diagnostics.Process.GetProcesses();
// Faz um FOR (busca) em todos os processos for (int i = 0; i < processos.Length; i++) { // Verifica se um processo em especifico está sendo executado if (processos[i].ProcessName == "nome-projeto") { MessageBox.Show("Nome: " + processos[i].ProcessName.ToString()); } }
|
Note que foi usado o GetProcesses que retorna um array de processos executado na máquina. Com isso, o for fica fácil de fazer quando se tem a quantidade. (Code 1.3)
for (int i = 0; i < processos.Length; i++)
|
Dai em diante para pegar o nome do processo é uma mão na roda. Você pode pegar o id, pode matar o processo, pode verificar se está sendo executado e muito mais. O framework da Microsoft possibilita essa programação simples e tranqüila.
Bom, espero que tenha gostado e qualquer dúvida pode entrar em contato pelo site.
Subscribe ecode10.com
Receive our latest updates about programming languages, software, database, books, ebooks, classes, jobs and more.
You can cancel anytime.
Log In