2010-10-31 18 views
7

Estoy ejecutando un script de prueba desde un archivo por lotes.Cómo evitar el cuadro de mensaje emergente de error para el programa fallido (.exe) al ejecutar el archivo por lotes

Debido a que es una prueba, se espera que los programas fallen de vez en cuando. Es un archivo siempre que se devuelva el código de error para que pueda continuar y marcar la prueba específica como fallida.

Sin embargo, no es un comportamiento muy molesto de archivos ejecutables bajo Microsoft Windows - si algo falla ventana pop-ups como:

Esta aplicación no pudo iniciar porque no se encontró foo.dll, Reinstalación la aplicación puede solucionar el problema

<OK>

O aún mejor:

La instrucción en "..." hace referencia a la memoria en "..." ..

Haga clic en Aceptar para terminar el programa
Haga clic en CANCELAR para depurar el programa

El resultado es conocido - la ejecución del script bloquea hasta que alguien presiona el botón "Aceptar". Y cuando hablamos de scripts automáticos que pueden ejecutarse automáticamente por la noche en alguna máquina virtual sin cabeza, puede ser muy problemático.

¿Existe una sencilla manerapara evitar tal comportamiento y simplemente hacer una solicitud para salir con el código de error - sin cambiar el código del programa en sí mismo?

¿Es esto posible en absoluto?

Respuesta

4

La respuesta es la siguiente: Necesita deshabilitar WER. Descripción

más simple para esto he encontrado en http://www.noktec.be/archives/259

simplemente (en XP): Haga clic derecho en Mi PC> Avanzado> Informe de errores> Desactivar

Voila - programas fallan en silencio!

Esto no resuelve el problema cuando falta DLL, pero este es un caso muy raro y esto es suficiente para mí.

0

Es posible. Solíamos usar el producto Rational Robot de IBM, que podía controlar la pantalla en busca de artículos específicos y, si se encontraba, enviar pulsaciones de teclas a ventanas y otras cosas.

De hecho, lo usamos para pruebas de sistema y de unidad totalmente automatizadas, al igual que lo que intenta hacer.

Ahora he pensado que Robot ha sufrido bastantes cambios de nombre, por lo que puede ser difícil encontrarlo, pero en la página web de IBM y con una versión de prueba gratuita para usted. No es barato, marcando en un smidgeon por debajo de USD5,000 pero fue que vale la pena por nosotros.

También hay TestComplete donde se puede obtener una licencia por solo USD1,000 USD - recomienda "Prueba de caja negra - Prueba funcional de cualquier aplicación de Windows" como una de sus características y también tiene una demostración descargable para ver si es adecuado antes de la compra.

Sin embargo, es posible que pueda encontrar otro producto para hacer el mismo tipo de cosas.

Inicialmente pensé en Expect pero el ActiveState parece concentrarse en las aplicaciones de consola, lo que me lleva a pensar que puede que no haga bien los gráficos.

La única otra opción que puedo sugerir es escribir su propio programa en VBScript. He hecho esto antes para automatizar el inicio de muchos procesos (iniciar sesión para trabajar en VPN, iniciar correo, iniciar sesión, etc.) para poder configurarlo completamente con un clic de mouse en lugar de tener que iniciar todo manualmente.

Puede usar AppActivate para traer una ventana al primer plano y SendKeys para enviarle pulsaciones de teclas arbitrarias después de eso. Es posible que pueda improvisar algo de eso si quiere una solución más barata.

+1

Sé que ** es ** posible ya que sé que cuando comienzo el proceso desde Cygwin Shell no hace "pop-ups" cosas pero muere silenciosamente. El problema es que no quiero usar el shell de Cygwin para tal fin. Y, por supuesto, para comprar un producto de $ XXXX que haga clic para mí. – Artyom

2

Puede suprimir los AV y otros que muestran un cuadro de diálogo ejecutando su aplicación, o el script (el motor de script, como cscript.exe), bajo un depurador.

Utilice Gflags.exe o modifique el registro directamente y configure las Opciones de ejecución del archivo de imagen para la imagen en cuestión. Vea esto article para detalles sobre cómo usar las claves de registro apropiadas. Puede configurarlo usando una línea de comandos de depurador como "C: \ Debuggers \ ntsd.exe -g -G -c'command '", donde puede pasar comandos para ignorar ciertos tipos de excepciones en el argumento -c "commmand". Esto efectivamente le dará una herramienta para suprimir diálogos interactivos como resultado de excepciones como AV, y permitirá que el proceso continúe (presumiblemente hasta el final inmediato después de que se haya producido la excepción).

This El artículo explica los comandos que puede usar para controlar excepciones y eventos al utilizar el depurador.

Los indicadores -g y -G aseguran que el proceso no entrará en el depurador automáticamente durante el inicio y el final del proceso, respectivamente. Tendrá que jugar con las diversas opciones de supresión de excepciones para asegurarse de que 'come' todas las posibles excepciones de primera y segunda oportunidad que puedan hacer que el proceso se rompa en el depurador.

Además, si puede tolerar que se rompa un proceso en el depurador (en lugar de estar atascado mostrando un cuadro de diálogo), quizás esa sería una mejor opción en general. Puede evaluar cada interrupción de depuración en el modo de proceso por lotes en un momento posterior y decidir qué errores corre más riesgo.

Cuestiones relacionadas