ShellExecuteWait con tiempo máximo.

Pregunta Sin Miedo no te cortes cualquier cosa para empezar - Autoit se comienza facilmente.Para Ordenes o Comandos sueltos. Ver nota como preguntar.
Responder
Avatar de Usuario
xterix2
Mensajes: 8
Registrado: 10 Feb 2010, 15:52

ShellExecuteWait con tiempo máximo.

Mensaje 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.
Avatar de Usuario
BasicOs
Site Admin
Mensajes: 2085
Registrado: 21 Nov 2006, 19:24
Ubicación: El Internet - (Canarias, España)
Contactar:

Re: ShellExecuteWait con tiempo máximo.

Mensaje 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:)
Avatar de Usuario
xterix2
Mensajes: 8
Registrado: 10 Feb 2010, 15:52

Re: ShellExecuteWait con tiempo máximo.

Mensaje 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.
Avatar de Usuario
BasicOs
Site Admin
Mensajes: 2085
Registrado: 21 Nov 2006, 19:24
Ubicación: El Internet - (Canarias, España)
Contactar:

Re: ShellExecuteWait con tiempo máximo.

Mensaje 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:)
Avatar de Usuario
xterix2
Mensajes: 8
Registrado: 10 Feb 2010, 15:52

Re: ShellExecuteWait con tiempo máximo.

Mensaje 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
Avatar de Usuario
Ximorro
Profesional del Autoit
Mensajes: 1500
Registrado: 10 Jul 2009, 12:35
Ubicación: Castellón, España

Re: ShellExecuteWait con tiempo máximo.

Mensaje 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).
"¿Y no será que en este mundo hay cada vez más gente y menos personas?". Mafalda (Quino)
Responder