none
Comprobar el estado de una aplicacion

    Pregunta

  • Buenos días:

    Necesito saber si una aplicacion está activa, para eso he creado una aplicacion que contiene una funcion como esta:

    Private Function Responde(lcProceso As String) As Boolean
            Dim myProceso() As Process
            Dim lcresponde As Boolean = False
            Try
                myProceso = Process.GetProcessesByName(lcProceso)
                If myProceso.Length > 0 Then
                    If myProceso(0).Responding Then
                        lcresponde = True
                    Else
                        lcresponde = False
                    End If
                Else
                    lcresponde = False
                End If
            Catch ex As Exception
                MessageBox.Show("[Error:Responde]." & ex.Message.ToString(), "Atención", MessageBoxButtons.OK)
                lcresponde = False
            End Try
            Return lcresponde
        End Function

    Hago llamadas mediante un boton en la que le paso el proceso/aplicacion que quiero comprobar si esta operativa.

    Mi problema es el siguiente, tengo un programa llamado XXX.EXE que lo arranco y me pasa lo siguiente:

    1.- Pulso el botón que llama a la funcion de arriba, el codigo del boton es el siguiente:

    Private Sub btnResponde_Click(sender As Object, e As EventArgs) Handles btnResponde.Click
            If (Responde("XXX")) Then
                MessageBox.Show("El proceso responde", "Atención", MessageBoxButtons.OK)
            Else
                MessageBox.Show("El proceso no responde / no está en ejecución", "Atención", MessageBoxButtons.OK)
            End If
        End Sub

    Al pulsarlo me dice "El proceso responde".

    2.- Posteriormente dentro de esta aplicacion XXX tengo un boton que me realiza una tarea en la base de datos que tarda bastante. Si vuelvo a comprobar el estado de dicha aplicacion XXX pulsando el boton btnResponde me dice que "El proceso no responde / no está en ejecución" sin embargo veo que la barra de proceso de esta aplicacion XXX si que está avanzando y termina la ejecucion de la tarea correctamente (una vez terminada al darle al boton btnResponde me devuelve "El proceso responde".

    ¿Por qué pasa esto?

    Gracias,

    martes, 17 de enero de 2017 8:10

Respuestas

  • La forma en que se comprueba el "Responding" es enviando un mensaje a la cola de mensajes de Windows y verificando que el programa bajo prueba esta bombeando mensajes. Si el programa esta bloqueado haciendo otra cosa, y sus autores no hicieron nada para que los mensajes se procesen mientras tanto (por ejemplo, usando varios hilos o llamando periodicamente a Application.DoEvents), entonces Process.Responding devolvera False porque el programa no contesta a los mensajes.
    martes, 17 de enero de 2017 12:02

Todas las respuestas

  • La forma en que se comprueba el "Responding" es enviando un mensaje a la cola de mensajes de Windows y verificando que el programa bajo prueba esta bombeando mensajes. Si el programa esta bloqueado haciendo otra cosa, y sus autores no hicieron nada para que los mensajes se procesen mientras tanto (por ejemplo, usando varios hilos o llamando periodicamente a Application.DoEvents), entonces Process.Responding devolvera False porque el programa no contesta a los mensajes.
    martes, 17 de enero de 2017 12:02
  • Buenas tardes:

    He hecho un servicio que comprueba si una aplicacion esta abierta, en el caso que no lo esté la abre.

    El problema lo tengo porque no es capaz de abrirla, sin embargo si entro en modo DEBUG el proceso lo hace correcto y abre la misma sin problemas.

    ¿Alguna solucion?. Si teneis algun ejemplo

    Gracias

    martes, 17 de enero de 2017 15:24
  • Hola

    Al intentarlo abrir te genera algún error?, el usuario de tu servicio debería tener permisos a tu aplicación que intentas abrir, normalmente se utiliza un usuario especial para los servicios.

    Saludos

    martes, 17 de enero de 2017 16:40