Как предотвратить появление всплывающего сообщения об ошибке для сбойной программы (.exe) при запуске командного файла - PullRequest
8 голосов
/ 31 октября 2010

Я запускаю тестовый скрипт из командного файла.

Поскольку это тест, программы должны время от времени выходить из строя. Это файл до тех пор, пока возвращается код ошибки, поэтому я могу продолжить и пометить определенный тест как неудачный.

Однако в Microsoft Windows очень раздражает поведение исполняемых файлов - если что-то не получается, появляется всплывающее окно, например:

Не удалось запустить данное приложение, так как не найден файл foo.dll. Повторная установка приложения может решить проблему

<OK>

Или даже лучше:

Инструкция в "..." ссылается на память в "..." ..

Нажмите OK, чтобы завершить программу
Нажмите ОТМЕНА, чтобы отладить программу

Результат известен - выполнение скрипта блокируется, пока кто-нибудь не нажмет кнопку «Ок». И когда мы говорим об автоматических сценариях, которые могут автоматически запускаться ночью на некоторых виртуальных машинах без головы, это может быть очень проблематично.

Существует ли простой способ предотвратить такое поведение и просто заставить приложение выйти с кодом ошибки - без изменения кода самой программы?

Возможно ли это вообще?

Ответы [ 3 ]

4 голосов
/ 07 ноября 2010

Ответ следующий: вам нужно отключить WER .

Самое простое описание этого я нашел на http://www.noktec.be/archives/259

Просто (ON XP): Правый кликна моем компьютере> Дополнительно> Отчеты об ошибках> Отключить

Вуаля - программы молча аварийно завершают работу!

Это не решает проблему, когда отсутствует DLL, но это очень редкий случай, и этого достаточно дляя.

2 голосов
/ 03 ноября 2010

Вы можете отключить AV и т. П. Отображение диалогового окна, запустив ваше приложение или сценарий (механизм сценариев, например cscript.exe), в отладчике.

Используйте Gflags.exe или измените реестр напрямую и установите параметры выполнения файла изображения для рассматриваемого изображения. См. Эту статью для получения подробной информации о том, как использовать соответствующие ключи реестра. Вы можете настроить его с помощью командной строки отладчика, например "C: \ Debuggers \ ntsd.exe -g -G -c'command '", где вы можете передавать команды для игнорирования определенных типов исключений в аргументе -c "commmand". Это эффективно даст вам инструмент для подавления интерактивных диалогов в результате исключений, таких как AV, и позволит процессу продолжаться (предположительно, к немедленному завершению после возникновения исключения).

В этой статье объясняются команды, которые вы можете использовать для управления исключениями и событиями при работе с отладчиком.

Флаги -g и -G гарантируют, что процесс не попадет в отладчик автоматически при запуске и завершении процесса соответственно. Вам придется поиграть с различными вариантами подавления исключений, чтобы убедиться, что вы «съели» все возможные варианты первого и второго шансов, которые могут привести к сбою процесса в отладчике.

Кроме того, если вы можете допустить, чтобы процесс был разбит на отладчик (в отличие от застревания при отображении диалогового окна), возможно, это было бы лучшим вариантом в целом. Вы можете оценить каждый разрыв отладки в пакетном режиме позднее и решить, какие ошибки вы хотите исправить.

0 голосов
/ 02 ноября 2010

Это возможно возможно.Мы привыкли использовать продукт IBM Rational Robot, который мог контролировать экран на предмет определенных элементов и, если он был обнаружен, отправлять нажатия клавиш в окна и другие виды вещей.

Мы фактически использовали его для полностью автоматизированного модульного и системного тестирования, оченькак вы пытаетесь сделать.

Теперь я подумал, что Робот претерпел немало изменений имени, поэтому его может быть трудно найти, но там это , прямо на веб-странице IBMи с бесплатной загружаемой пробной версией для вас.Это недешево, работать на smidgeon под 5000 долларов США, но это стоило нам .

Также есть TestComplete , где вы можете получить лицензию всего заunedr 1 000 долларов США - в качестве одной из функций он рекламирует «Тестирование черного ящика - функциональное тестирование любого приложения Windows», а также загружаемую демонстрацию, чтобы узнать, подходит ли она перед покупкой.

Однако вы можетесмог найти другой продукт для такого же рода действий.

Сначала я думал о Expect, но, похоже, что ActiveState концентрируется на консольных приложениях, что наводит меня на мысль, что графика может плохо работать.

Единственный другой вариант, который я могу предложить, - написать вашу собственную программу на VBScript.Я делал это раньше, чтобы автоматизировать запуск многих процессов (войти в систему для работы VPN, запустить почту, войти в систему и т. Д.), Чтобы можно было полностью настроить одним щелчком мыши вместо того, чтобы запускать все вручную.

Вы можете использовать AppActivate, чтобы вывести окно на передний план, и SendKeys, чтобы после этого отправлять ему произвольные нажатия клавиш.Возможно, вы сможете собрать что-то из этого, если захотите более дешевое решение.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...