Página 1 de 1

ShellExecuteWait con tiempo máximo.

Publicado: 06 Mar 2010, 12:38
por xterix2
Hola de nuevos a todos.
Ando lanzando un proceso que si todo va bien finaliza en 30 segundos y no quiero continuar el script hasta que este punto este finalizado, había probado el comando ShellExecuteWait, pero si es proceso no va bien no se auto cierra por lo que es script no sigue.
Entiendo que podría lanzar un ShellExecute y en la siguiente línea poner un processclose(process, time), pero me gustaría que el script continúe cuando el proceso finalice o darle un time-out máximo de dos minutos.

¿Me podéis dar alguna pista de cómo hacerlo?

Gracias.

Re: ShellExecuteWait con tiempo máximo.

Publicado: 06 Mar 2010, 16:00
por BasicOs
Creo que lo has explicado muy bien. Pero si puedes postear tu código.
O poner un ejemplo de lo que quieres en autoit (o al menos con pseudocodigo+autoit),
Salu2:)

Re: ShellExecuteWait con tiempo máximo.

Publicado: 06 Mar 2010, 17:10
por xterix2
Hola.

De momento lo he resuelto con ejecución + espera + matar proceso.

El código actual es:

Código: Seleccionar todo

$error_code_altiris_post = ShellExecute(@WindowsDir&"\AltirisAgentBooster.exe","/server:xxxx.xxx.xxx /silent /noactivitytimer:0 /skipinstallagent /addcollectionguids:xxxxxxxx)
sleep(120000)
ProcessClose("AltirisAgentBooster.exe")
Cuando lo que me gustaría es:

Código: Seleccionar todo

ShellExecuteWAIT(@WindowsDir&"\AltirisAgentBooster.exe","/server:xxxx.xxx.xxx /silent /noactivitytimer:0 /skipinstallagent /addcollectionguids:xxxxxxxx)
con un time out de 120 segundos.

Con el ello la ejecucción duraría el tiempo de proceso de altirisagentbooster.exe y en caso de que el proceso no haya acabado en 120 segundos matarlo.

A ver si me dais una idea de como hacerlo.

Gracias.

Re: ShellExecuteWait con tiempo máximo.

Publicado: 06 Mar 2010, 22:28
por BasicOs
El código que hiciste ya hace lo que deseas, no?

Parece que lo que buscas puede ser algo como:

Código: Seleccionar todo

Run()-->el programa.exe
$valordeRetorno=ProcessWaitClose("miprograma.exe",120)
Run se usa más para los exe, y shellexecute() abrir ficheros con extensiones registradas con un open,edit etc...
devuelve 0 si la espera llegó hasta los 120 segundos.
Salu2:)

Re: ShellExecuteWait con tiempo máximo.

Publicado: 06 Mar 2010, 22:52
por xterix2
Hola.

Gracias por el apunte BasicOs, cambiare el script para utilizar el Run.

Realmente hace a medias lo que quiero, deseo que si el proceso se ejecuta en menos de 120 segundos siga el script, en caso de llegar a los 120 segundos o el tiempo estipulado mate el proceso para poder continuar.

La solución aplicada es siempre esperar los 120 segundos, efectiva, pero no del todo elegante.

Gracias, Un Saludo. :smt024

Re: ShellExecuteWait con tiempo máximo.

Publicado: 09 Mar 2010, 14:03
por Ximorro
Justo eso que quieres es lo que se hace con el ProcessWaitClose que te ha puesto XPyro.

Esa función se espera a que finalice el programa o a que pase el tiempo especificado (120segs), lo que ocurra antes.
A parte del control de errore, si devuelve 1 ha terminado antes del tiempo, si devuelve 0 es que ha llegado al límite de tiempo (y entonces si quieres puedes matarlo).