9
votes

Comment prévenir la boîte de message contextuelle d'erreur pour le programme échoué (.exe) lors de l'exécution de fichier de commandes

Je suis un script de test à partir de fichier batch.

Parce que c'est le test, les programmes devraient échouer de temps en temps. C'est un fichier tant que le code d'erreur est renvoyé afin que je puisse continuer et marquer un test spécifique comme étant échoué.

Cependant, il existe un comportement très gênant de fichiers exécutables sous Microsoft Windows - si quelque chose échoue une fenêtre contextuelle comme:

Cette application n'a pas pu démarrer car foo.dll n'a pas été trouvée, réinstaller l'application peut résoudre le problème

ou même mieux:

L'instruction à "..." référencée à la mémoire à "..." ..

Cliquez sur OK pour terminer le programme
Cliquez sur Annuler pour déboguer le programme

Le résultat est connu - l'exécution du script bloque jusqu'à ce que quelqu'un appuie sur le bouton "OK". Et lorsque nous parlons de scripts automatiques pouvant exécuter automatiquement la nuit dans une machine virtuelle sans tête, cela peut être très problématique.

Y a-t-il un moyen simple d'empêcher un tel comportement et de faire une application pour sortir avec le code de défaillance - sans changer le code du programme lui-même?

est-ce possible du tout?


3 Réponses :


0
votes

Il est possible. Nous avions l'habitude d'utiliser le produit Rational Rational d'IBM qui pourrait surveiller l'écran pour des éléments spécifiques et, si trouvé, envoyer des frappes à Windows et d'autres sortes de choses.

Nous l'avons réellement utilisé pour les tests de l'unité et du système entièrement automatisés, un peu comme si vous essayez de faire.

Maintenant, je pensais que le robot a été passé de nombreuses modifications de nom afin qu'il soit difficile de trouver, mais là est , directement sur la page Web de IBM et avec un essai téléchargeable gratuitement pour vous. Ce n'est pas bon marché, ce qui a chronométré dans un Smidgeon sous 5 000 USD mais il était vaut la peine pour nous.

Il y a aussi testComplete où vous pourriez obtenir une licence pour Just UNED1 000 USD - IT Toutes "Test de boîte noire - test fonctionnel de n'importe quelle application Windows" comme l'une de ses fonctionnalités et possède également une démonstration téléchargeable pour voir si elle convient avant l'achat.

Cependant, vous pourrez peut-être trouver un autre produit pour faire le même genre de chose.

J'ai initialement pensé à Attendez-vous , mais l'ActiveState On semble concentrer sur les applications de console qui me conduit à croire que cela ne peut pas bien faire des graphiques.

La seule autre option que je peux suggérer est d'écrire votre programme propre dans VBScript. J'ai déjà fait cela avant d'automatiser le début de nombreux processus (connectez-vous à VPN de travail, de démarrage du courrier, de vous connecter, etc.) afin que je puisse être pleinement configuré avec une mouseClick au lieu de devoir tout commencer manuellement.

Vous pouvez utiliser appactivate pour apporter une fenêtre au premier plan et SendKeys pour lui envoyer des touches arbitraires après cela. Il est possible que vous puissiez être capable de gonfler quelque chose de cela si vous voulez une solution moins chère.


1 commentaires

Je sais que est possible car je sais que lorsque je commence à traiter à partir de la coquille Cygwin, il ne "Pop-ups" ne meurt pas silencieusement. Le problème est que je ne veux pas utiliser la coquille de Cygwin à cette fin. Et bien sûr, acheter $ xxxx produit qui clique sur moi.



2
votes

Vous pouvez supprimer AV et telle de montrer une boîte de dialogue en exécutant votre application, ou le script (le moteur de script, comme cscript.exe), sous un débogueur.

Utilisez GFLAGS.EXE ou modifiez directement le registre et définissez les options d'exécution des fichiers image pour l'image en question. Voir ce Article pour plus de détails sur l'utilisation les clés de registre appropriées. Vous pouvez la configurer à l'aide d'une ligne de commande de débogueur comme "C: \ Debuggers \ ntsd.exe -g -g -g -c'command '", où vous pouvez passer des commandes pour ignorer certains types d'exceptions dans l'argument "CommMand". Cela vous donnera effectivement un outil permettant de supprimer des dialogues interactives à la suite d'exceptions telles que AV et de laisser le processus continuer (probablement à la fin immédiate après l'octroi de l'exception).

Cet article explique le Les commandes que vous pouvez utiliser pour contrôler les exceptions et les événements de la mise en marche du débogueur.

Les drapeaux -g et -g des drapeaux assurent que le processus ne se cassera pas automatiquement au débogueur pendant le début et la fin du processus, respectivement. Vous devrez jouer avec les différentes options de suppression d'exception afin de vous assurer que vous «mangerez» toutes les premières et seconde chance que, à l'exception, à l'exception du processus qui pourrait entraîner une pause dans le débogueur.

En outre, si vous pouvez tolérer un processus étant cassé dans le débogueur (comme contre être bloqué dans une boîte de dialogue), ce serait peut-être une meilleure option globale. Vous pouvez évaluer chaque pause de débogage en mode batch ultérieurement et décider des bugs que vous souhaitez résoudre.


0 commentaires