none
Verificar se aplicativo já está em execução... RRS feed

  • Pergunta

  •  

    Boa tarde...

     

    Preciso de um help...

     

    Meu problema é os seguinte...

     

    Tenho um aplicativo desenvolvido em VS 2003 Vb.net... meu aplicativo pode ser executado somente uma unica vez na máquina, e enquanto essa execução estiver ativa eu nao posso deixar o aplicativo ser executado novamente. Como  posso fazer essa validação se meu aplicativo ja está sendo executado ou se posso deixá-lo executar novamente...

     

    Se alguem puder me ajudar eu agradeço.

    segunda-feira, 11 de fevereiro de 2008 17:02

Respostas

  • MMSALEI,

     

    FAÇA ASSIM:

     

     

    Code Snippet

    Dim s() As Process     ' Gera um array de processos

     

    s = Process.GetProcessesByName("IEXPLORE"'Recupera todos os processos com o nome IEXPLORE

     

    If s.Length > 0 Then  ' Se o tamanho do array for > 0 quer dizer que o processo está ativo

     

    MsgBox("Processo está em execução!")

     

    End If

     

    s(0).Kill() 'Se desejar forçar o fechamento do processo utilize o método Kill

     

     

    Espero ter ajudado,

     

    Se a resposta foi útil marque-a por favor...

     

    Allex

    segunda-feira, 11 de fevereiro de 2008 17:46
  • Allex,

     

    Pode tirar uma duvida..

     

    o meu aplicativo gera um processo com o nome Relatorio.exe, preciso por so relatorio ou o nome completo?

     

    Se coloco so Relatorio ele nao deixa entrar nunca, sempre da a mensagem dizendo que o aplicativo ja esta sendo executado, se coloco o nome inteiro nao funciona...

     

    Se puder me ajudar eu agradeço

    segunda-feira, 11 de fevereiro de 2008 19:41
  • mmsalei,

     

    Coloque somente RELATORIO em maiúsculo.

    Como ele não deixa entrar nunca?

    Você quer saber se ele está em execução e se não tiver abri-lo é isso?

     

    Allex

     

    terça-feira, 12 de fevereiro de 2008 11:24
  • Oi Allex...

     

    fiz o que vc disse, mas não consegui..infelizmente nao deu certo...

     

    se coloco somente o nome do aplicativo como 'CSC' ele me deixa abrir quantos executaveis eu quiser...

     

    fiz exatamente como vc passou...

     

    Dim s() As Process ' Gera um array de processos

    s = Process.GetProcessesByName("CSC") 'Recupera todos os processos com o nome IEXPLORE

    If s.Length > 0 Then ' Se o tamanho do array for > 0 quer dizer que o processo est  ativo

    MsgBox("Processo est  em execução!")

    Exit Sub

    End If

    terça-feira, 12 de fevereiro de 2008 11:59
  • Coloque assim no evento Form_Load da sua aplicação:

    Code Snippet

     

    Private Sub Form10_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load

    Dim s() As Process ' Gera um array de processos

    s = Process.GetProcessesByName("CSC") 'Recupera todos os processos com o nome IEXPLORE

    If s.Length > 0 Then ' Se o tamanho do array for > 0 quer dizer que o processo está ativo

    Me.Close()

    Application.Exit()

    End If

    's(0).Kill() 'Se desejar forçar o fechamento do processo utilize o método Kill

    End Sub

     

     

     

     

    Assim ele não vai deixar seu programa abrir se ele já estiver em execução.

    Allex

    terça-feira, 12 de fevereiro de 2008 12:23
  •  

    Oi Allex, tudo bem?

     

    Eu nao sei se estou fazendo alguma coisa errada.

     

    Coloquei o codigo que vc mandou...compilei e gerei o executavel..

    quando clico no executavel pela primeira vez ele ja me da a mensagem dizendo que o aplicativo ja esta sendo executado.

     

    Coloquei no load do formulário, e a mesma coisa aconteceu...

     

    infelizmente nao consegui usar teu código...mas também nao sei o pq..

     

     

    quinta-feira, 14 de fevereiro de 2008 17:01
  • Olá mmsalei,

     

    Ah ja sei o erro na verdade o length é maior que 1 e não maior que 0, pois quando chega no evento Form_Load o processo já está ativo:

     

    Code Snippet

    Private Sub Form10_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load

    Dim s() As Process ' Gera um array de processos

    s = Process.GetProcessesByName("CSC") 'Recupera todos os processos com o nome IEXPLORE

    If s.Length > 1 Then ' Se o tamanho do array for > 0 quer dizer que o processo está ativo

    Me.Close()

    Application.Exit()

    End If

    's(0).Kill() 'Se desejar forçar o fechamento do processo utilize o método Kill

    End Sub

     

     

     

    Espero ter ajudado

    Allex

    quinta-feira, 14 de fevereiro de 2008 17:50
  • Oi Allex,

     

    Agora funcionou legal...

     

    Obrigada pela ajuda...!!!

    quinta-feira, 14 de fevereiro de 2008 18:02

Todas as Respostas

  • MMSALEI,

     

    FAÇA ASSIM:

     

     

    Code Snippet

    Dim s() As Process     ' Gera um array de processos

     

    s = Process.GetProcessesByName("IEXPLORE"'Recupera todos os processos com o nome IEXPLORE

     

    If s.Length > 0 Then  ' Se o tamanho do array for > 0 quer dizer que o processo está ativo

     

    MsgBox("Processo está em execução!")

     

    End If

     

    s(0).Kill() 'Se desejar forçar o fechamento do processo utilize o método Kill

     

     

    Espero ter ajudado,

     

    Se a resposta foi útil marque-a por favor...

     

    Allex

    segunda-feira, 11 de fevereiro de 2008 17:46
  • Allex,

     

    Pode tirar uma duvida..

     

    o meu aplicativo gera um processo com o nome Relatorio.exe, preciso por so relatorio ou o nome completo?

     

    Se coloco so Relatorio ele nao deixa entrar nunca, sempre da a mensagem dizendo que o aplicativo ja esta sendo executado, se coloco o nome inteiro nao funciona...

     

    Se puder me ajudar eu agradeço

    segunda-feira, 11 de fevereiro de 2008 19:41
  • mmsalei,

     

    Coloque somente RELATORIO em maiúsculo.

    Como ele não deixa entrar nunca?

    Você quer saber se ele está em execução e se não tiver abri-lo é isso?

     

    Allex

     

    terça-feira, 12 de fevereiro de 2008 11:24
  • Oi Allex...

     

    fiz o que vc disse, mas não consegui..infelizmente nao deu certo...

     

    se coloco somente o nome do aplicativo como 'CSC' ele me deixa abrir quantos executaveis eu quiser...

     

    fiz exatamente como vc passou...

     

    Dim s() As Process ' Gera um array de processos

    s = Process.GetProcessesByName("CSC") 'Recupera todos os processos com o nome IEXPLORE

    If s.Length > 0 Then ' Se o tamanho do array for > 0 quer dizer que o processo est  ativo

    MsgBox("Processo est  em execução!")

    Exit Sub

    End If

    terça-feira, 12 de fevereiro de 2008 11:59
  • Coloque assim no evento Form_Load da sua aplicação:

    Code Snippet

     

    Private Sub Form10_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load

    Dim s() As Process ' Gera um array de processos

    s = Process.GetProcessesByName("CSC") 'Recupera todos os processos com o nome IEXPLORE

    If s.Length > 0 Then ' Se o tamanho do array for > 0 quer dizer que o processo está ativo

    Me.Close()

    Application.Exit()

    End If

    's(0).Kill() 'Se desejar forçar o fechamento do processo utilize o método Kill

    End Sub

     

     

     

     

    Assim ele não vai deixar seu programa abrir se ele já estiver em execução.

    Allex

    terça-feira, 12 de fevereiro de 2008 12:23
  •  

    Oi Allex, tudo bem?

     

    Eu nao sei se estou fazendo alguma coisa errada.

     

    Coloquei o codigo que vc mandou...compilei e gerei o executavel..

    quando clico no executavel pela primeira vez ele ja me da a mensagem dizendo que o aplicativo ja esta sendo executado.

     

    Coloquei no load do formulário, e a mesma coisa aconteceu...

     

    infelizmente nao consegui usar teu código...mas também nao sei o pq..

     

     

    quinta-feira, 14 de fevereiro de 2008 17:01
  • Olá mmsalei,

     

    Ah ja sei o erro na verdade o length é maior que 1 e não maior que 0, pois quando chega no evento Form_Load o processo já está ativo:

     

    Code Snippet

    Private Sub Form10_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load

    Dim s() As Process ' Gera um array de processos

    s = Process.GetProcessesByName("CSC") 'Recupera todos os processos com o nome IEXPLORE

    If s.Length > 1 Then ' Se o tamanho do array for > 0 quer dizer que o processo está ativo

    Me.Close()

    Application.Exit()

    End If

    's(0).Kill() 'Se desejar forçar o fechamento do processo utilize o método Kill

    End Sub

     

     

     

    Espero ter ajudado

    Allex

    quinta-feira, 14 de fevereiro de 2008 17:50
  • Oi Allex,

     

    Agora funcionou legal...

     

    Obrigada pela ajuda...!!!

    quinta-feira, 14 de fevereiro de 2008 18:02
  • Ok mmsalei,

     

    Qualquer coisa é só postar!!!

     

    Allex

    quinta-feira, 14 de fevereiro de 2008 18:25
  • Pessoal, preciso de uma ajuda, tenho um projeto com o software de gerenciamento financeiro..

    Somente o administrador pode fazer o backup, mas tem um problema, o sistema que faz o backup é separado, eu chamo ele com o Process.Start ao clicar no botão backup..

    Seguinte, se o usuário ir na pasta onde está instalado o sistema, e abrir o arquivo backup, ele faz o backup..

    Preciso de algo para verificar no load do backup se o PrjAlpha, que é o projeto de gerenciamento financeiro, preciso ver se ele que "startou" o backup, caso contrário, ele não abra e apareça uma messageBox...

    Já tentei criando uma tabela no SQL de status_user para verificar se usuário abriu o backup, funcionou, mas na hora de restaurar o backup, ele da erro pois o sql ta em execução por ele ter verificado o status_user..

    estou usando C#...

    vlww!

    quarta-feira, 15 de maio de 2013 20:00