Proceso vacio ¿o no?

19/07/2006 - 11:48 por Fernando | Informe spam
Hola grupo, gracias antes que nada. Resulta que he definido un proceso
de la siguiente forma :

Dim MiProceso As System.Diagnostics.Process

y hago lo siguiente:
MiProceso = MiProceso.Start("archivo.Exe")

el problema viene cuando quiero preguntarle a MiProceso si se esta
ejecutando o no, ya que cuando le pregunto por "Nothing" o si tiene ID,
etc , me dice que no tiene ningun proceso asociado el objeto. Ahora la
pregunta, ¿como hago para preguntarle al objeto "MiProceso" si tiene
algun proceso asociado? Desde ya muchas gracias

Fernando

Preguntas similare

Leer las respuestas

#1 Leonardo Azpurua [mvp vb]
19/07/2006 - 17:02 | Informe spam
"Fernando" escribió en el mensaje
news:
Hola grupo, gracias antes que nada. Resulta que he definido un proceso de
la siguiente forma :

Dim MiProceso As System.Diagnostics.Process

y hago lo siguiente:
MiProceso = MiProceso.Start("archivo.Exe")

el problema viene cuando quiero preguntarle a MiProceso si se esta
ejecutando o no, ya que cuando le pregunto por "Nothing" o si tiene ID,
etc , me dice que no tiene ningun proceso asociado el objeto. Ahora la
pregunta, ¿como hago para preguntarle al objeto "MiProceso" si tiene algun
proceso asociado? Desde ya muchas gracias

Fernando



Hola, Fernando:

La verdad, es la primera vez que hago algo con esa clase :-)

Pero al parecer funciona bien, segun compruebo con este codigo:

Dim WithEvents miProceso As System.Diagnostics.Process

Private Sub Button12_Click(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles Button12.Click
miProceso = System.Diagnostics.Process.Start("C:\Windowsotepad.exe")
miProceso.EnableRaisingEvents = True
End Sub

Private Sub miProceso_Exited(ByVal sender As Object, ByVal e As
System.EventArgs) Handles miProceso.Exited
MsgBox("Proceso " & miProceso.Id & " terminado")
miProceso.Dispose()
End Sub

Te sugiero que los objetos de tipo Process o bien sean Nothing, o bien esten
asociados a un proceso activo. No uses referencias de instancia para llamar
a miembros estaticos (Shared) de la clase, es decir,
miProceso.Start(nombreArchivo) es confuso.

Cuando llamas a Process.Start(archivo) pueden pasar dos cosas: se crea un
nuevo proceso donde se ejecuta el archivo, o se genera una excepcion. De
manera que si no tuviste una excepcion, el proceso existe y se está
ejecutando (miProceso.hasExited = False).

Si eres disciplinado en el manejo de los procesos, no deberias tener ningun
tipo de dilema.

Salud!
Respuesta Responder a este mensaje
#2 Fernando
19/07/2006 - 17:12 | Informe spam
Leonardo Azpurua [mvp vb] escribió:
"Fernando" escribió en el mensaje
news:
Hola grupo, gracias antes que nada. Resulta que he definido un proceso de
la siguiente forma :

Dim MiProceso As System.Diagnostics.Process

y hago lo siguiente:
MiProceso = MiProceso.Start("archivo.Exe")

el problema viene cuando quiero preguntarle a MiProceso si se esta
ejecutando o no, ya que cuando le pregunto por "Nothing" o si tiene ID,
etc , me dice que no tiene ningun proceso asociado el objeto. Ahora la
pregunta, ¿como hago para preguntarle al objeto "MiProceso" si tiene algun
proceso asociado? Desde ya muchas gracias

Fernando



Hola, Fernando:

La verdad, es la primera vez que hago algo con esa clase :-)

Pero al parecer funciona bien, segun compruebo con este codigo:

Dim WithEvents miProceso As System.Diagnostics.Process

Private Sub Button12_Click(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles Button12.Click
miProceso = System.Diagnostics.Process.Start("C:\Windowsotepad.exe")
miProceso.EnableRaisingEvents = True
End Sub

Private Sub miProceso_Exited(ByVal sender As Object, ByVal e As
System.EventArgs) Handles miProceso.Exited
MsgBox("Proceso " & miProceso.Id & " terminado")
miProceso.Dispose()
End Sub

Te sugiero que los objetos de tipo Process o bien sean Nothing, o bien esten
asociados a un proceso activo. No uses referencias de instancia para llamar
a miembros estaticos (Shared) de la clase, es decir,
miProceso.Start(nombreArchivo) es confuso.

Cuando llamas a Process.Start(archivo) pueden pasar dos cosas: se crea un
nuevo proceso donde se ejecuta el archivo, o se genera una excepcion. De
manera que si no tuviste una excepcion, el proceso existe y se está
ejecutando (miProceso.hasExited = False).

Si eres disciplinado en el manejo de los procesos, no deberias tener ningun
tipo de dilema.

Salud!




Hola Leonardo, gracias. Lo que hice con esto es abrir el teclado en
pantalla, pero queria preguntar en un determinado momento si el proceso
"MiProceso.algo" estaba operativo o no y me da un error diciendo
"El objeto no tiene asociado ningun proceso". Pense que tendría alguna
propiedad que me diria "true" o "false" si el objeto tuviera algun
proceso asociado. Desde ya muchas gracias

Fernando
Respuesta Responder a este mensaje
#3 Leonardo Azpurua [mvp vb]
20/07/2006 - 03:20 | Informe spam
"Fernando" escribió en el mensaje
news:
Hola Leonardo, gracias. Lo que hice con esto es abrir el teclado en
pantalla, pero queria preguntar en un determinado momento si el proceso
"MiProceso.algo" estaba operativo o no y me da un error diciendo
"El objeto no tiene asociado ningun proceso". Pense que tendría alguna
propiedad que me diria "true" o "false" si el objeto tuviera algun proceso
asociado. Desde ya muchas gracias



Hola.

Pues no: cualquier intento por interrogar el estado de un proceso
inexistente te dará un error.

Puedes colocar la prueba dentro de un bloque Try/Catch, si cae por el lado
del Catch o no está activo o bien hay otro tipo de error (si la diferencia
es importante, puedes consultar las propiedades o el tipo de la excepcion).

Se me ocurre que podrías "envolver" el proceso dentro de una clase: en ella
manejas los eventos Exited y Disposed del control, actualizando un par de
indicadores que te dicen si el proceso está activo (ha sido iniciado, no ha
terminado e isExecuting es true), si ya terminó -o si no ha iniciado- o si
ha sido descartado (Disposed).

De todas maneras, con un poco de orden, podrías colocar la referencia a
Nothing en el momento que en el proceso termina (lo cual puedes detectar
mediante el evento Exiting). Y el problema se reduce a saber si la variable
contiene Nothing (el proceso termino o no ha sido iniciado) o no (el proceso
está activo, en ese caso puedes determinar -mediante un metodo que no
recuerdo el nombre, pero es sbien descriptivo, si el proceso está
"respondiendo").

Salud!
Respuesta Responder a este mensaje
#4 Fernando
20/07/2006 - 12:15 | Informe spam
Leonardo Azpurua [mvp vb] escribió:
"Fernando" escribió en el mensaje
news:
Hola Leonardo, gracias. Lo que hice con esto es abrir el teclado en
pantalla, pero queria preguntar en un determinado momento si el proceso
"MiProceso.algo" estaba operativo o no y me da un error diciendo
"El objeto no tiene asociado ningun proceso". Pense que tendría alguna
propiedad que me diria "true" o "false" si el objeto tuviera algun proceso
asociado. Desde ya muchas gracias



Hola.

Pues no: cualquier intento por interrogar el estado de un proceso
inexistente te dará un error.

Puedes colocar la prueba dentro de un bloque Try/Catch, si cae por el lado
del Catch o no está activo o bien hay otro tipo de error (si la diferencia
es importante, puedes consultar las propiedades o el tipo de la excepcion).

Se me ocurre que podrías "envolver" el proceso dentro de una clase: en ella
manejas los eventos Exited y Disposed del control, actualizando un par de
indicadores que te dicen si el proceso está activo (ha sido iniciado, no ha
terminado e isExecuting es true), si ya terminó -o si no ha iniciado- o si
ha sido descartado (Disposed).

De todas maneras, con un poco de orden, podrías colocar la referencia a
Nothing en el momento que en el proceso termina (lo cual puedes detectar
mediante el evento Exiting). Y el problema se reduce a saber si la variable
contiene Nothing (el proceso termino o no ha sido iniciado) o no (el proceso
está activo, en ese caso puedes determinar -mediante un metodo que no
recuerdo el nombre, pero es sbien descriptivo, si el proceso está
"respondiendo").

Salud!




Gracias Leonardo, es lo que hice; ponerlo en un try/catch. Probare lo
que dices de ponerlo en una clase a ver como resulta. Gracias, saludos

Fernando
email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaRespuesta Tengo una respuesta
Search Busqueda sugerida