jueves, 16 de febrero de 2012

Leer y Terminar Procesos

Que pasa amigos como va la cosa, hoy voy a describir un codigo muy simple, pero que ha la hora de saber si un proceso al que han llamado desde codigo todavía sigue ejecutandose, es muy conveniente.

Debemos saber que exiten dos formas de obtener el nombre de un proceso, una es conociendo el nombre de este e instanciar el método
Process.GetProcessesByName y otra es capturar el nombre del proceso cuando se llama desde el método Process.Start.

Lo primero es saber que podemos llamar un proceso utilizando el método System.Diagnostics.Process.Start, de dos forma:

  • La primera es indidando el Path del programa que se ejecutara y la opción y,
  • La segunda es dejando que Process.Start decida que programa utilizar.

Sobre estos dos casos y siempre que sepan que el o los programas existen por o bajo requisito previo, yo recomiendo la primera opción, ya que con esto también, siempre sabrán el nombre del proceso. Deben considerar que solo en la mayoría de los casos el método Process.Start retorna el nombre del proceso.

Por ejemplo si queremos llamar una URL "http://maps.google.es/maps?hl=de&tab=Tl", existen dos formas de hacerlo:

Indicando el programa:
Dim url as String = ""http://maps.google.es"
System.Diagnostics.Process.Start("C:\Program Files\Internet Explorer\iexplore.exe", url)

o enviando solo la URL y que el sistema decida que navegador utilizar, en el caso de que exista más de uno
Dim url as String = ""http://maps.google.es"
System.Diagnostics.Process.Start(url)


En el primer caso sabriamos el nombre del proceso "iexplore", ya que estamos indicando cual debe ser el programa a utilizar.
En el segundo caso, si en el PC estuviera instalado Chrome, se habriría este navegador porque es el más compatible con esta URL.
Pero deberíamos capturar el nombre del proceso, porque es el sistema quien ha decidido cual es el mejor programa compatible a usar

Para detectar el nombre del proceso solo deben utilizar la siguiente clausula:
Dim sProcess as String = System.Diagnostics.Process.Start(path).ProcessName

Esto les permitira rescatar en un 90% - 99% de los casos el nombre del proceso, por eso recomiendo la primera forma.

Ahora nos toca saber si nuestro proceso se encuentra ejecutando, para asi detenerlo, para ello usaremos la clausula GetProcessesByName("Nombre del proceso").

Este método entrega un arreglo (Array) con los procesos coincidentes, yo directamente mato el proceso si existe y lo controlo en un Try, pero si lo desean pueden crear una variable arreglo, verificar el largo y luego si existe el proceso, matarlo: voy a ponerles los dos ejemplos:

Dim aProcess() as System.Diagnostics.Process = Process.GetProcessesByName("Nombre del Proceso")
If aProcess.Length > 0 Then
aProcess(0).Kill()
End If

Esa es la forma formal y carretera, yo hago

Try : Process.GetProcessesByName("Nombre del Proceso")(0).Kill()

Catch : End Try

Menos elegante pero en dos lineas se entiende lo que se desea hacer

Bueno amigos, más facil imposible, espero que lo usen bien


No hay comentarios: