Abrir o programa apenas uma vez


por Mauricio Junior em 1/1/2011 0

        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());

                }

            }

 

Code 1.2

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++)

 

Code 1.3

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.
voltar   comente  subir

 
Mauricio Junior Formado pela Faculdade Anhanguera, Especialista pela FGV (Fundação Getúlio Vargas), Pós-Graduação em Docência Superior e cursando Mestrado na UNB Engenharia Elétrica; .
Tenho 29 anos e possuo sete livros publicados pela editora Ciência Moderna. Sou Certificado Microsoft MCP, MCAD e MVP, faço parte da comunidade ASPNETI.COM, ECODE10.COM, onde publico artigos, vídeos, ebooks e livros Publico artigos, vídeos e podcast em outras comunidades. Trabalho como Analista de Sistemas / Desenvolvedor na empresa ATP S/A. Blog: blog.mauriciojunior.org, Site pessoal www.mauriciojunior.org



Comentários:

Comente (dê sua opinião):
Comentário:
Código Imagem:  (digite o código da imagem respeitando maiúsculo e minúsculo)

Favor digitar o código da imagem para cadastramento.

 

Outros Artigos do Autor

Vírus / Spam Comentários
Sistema que faz busca no google
Criando arquivo usando Visual Studio.NET 2005
Abrindo Janela de Forma Modal
XAML Power Toys
Dica: SetFocus diferente
CSS no VS 2003
Ophone The Microsoft - Vídeo
Sort no GridView sem ir ao banco de dados novamente
Visual Source Safe - Série 1
Novo Firefox 3.0 - o chamado Minefield
Criando Sections Customizados
Gerando word com Visual Studio.NET 2005
Criptografando Senha
Trabalhando com ENUM
Tudo Sobre DataGrid - (ASP.NET e C#)
Visual Studio .NET 2010 com temas
MaskedTextBox da direita para esquerda
Vídeo - Criptografia e Descriptografia
Microsoft Mobile Explorer 3.0
Aprenda com Windows Azure
Criando TreeView com Visual Studio.NET 2005 (passo 1)
Apresentação do Windows
Importação e Comunicação entre Sistemas
Aplicativo iCotação Free
MSDN Media Center - download de vídeos
Microsoft Rolls Out Major Xbox Software Update
Chart - novo componente integrado Visual Studio .NET 2010
Chamando Programas de Dentro do Windows Forms
Windows Phone 7.1 Mango
User Control Windows executando no Internet Explorer (parte 2 de 2)
Gravando Erros com Exception no arquivo de log - Parte II
Usando Dll Nativa e Using
Evento na Faculdade Projeção
Padrões de nomenclaturas