#windows #testing #command-line-interface
#Windows #тестирование #интерфейс командной строки
Вопрос:
Кто-нибудь знает, как перенаправить / захватить модальные диалоговые окна с ошибками Windows? Это действительно проблематично для неинтерактивных программ командной строки, которые просто пытаются запустить программу и захватить код выхода и вывод stdout / stderr.
Самым последним примером этой проблемы является модальный диалог Windows, который имеет следующую форму:
Программа не может запуститься, потому что <foo.dll > отсутствует на вашем компьютере. Попробуйте переустановить программу, чтобы устранить эту проблему.
(Где заголовок окна модального графического интерфейса — «Системная ошибка»)
Комментарии:
1. Это диалоговое окно уже отключено для любого процесса, который вы запускаете из файла .bat /.cmd или из командной строки. Диагностика недоступна за пределами кода завершения процесса. Вы можете получить некоторые из них, включив привязки загрузчика, но это только для отладки: blogs.msdn.com/b/junfeng/archive/2006/11/20 /…
2. @HansPassant: Я не думаю, что это больше верно. Я только что проверил Windows 7, и программа, запущенная из пакетного файла или из командной строки, генерирует диалоговое окно с ошибкой. (Или, возможно, это зависит от того, является ли неисправный исполняемый файл консольным или Графический интерфейс?)
Ответ №1:
Эти диалоги системных ошибок могут быть подавлены с помощью SetErrorMode(). В этом случае CreateProcess() должен завершиться с ошибкой, а GetLastError() должен выдать вам соответствующий код ошибки.
Комментарии:
1. Как вы используете это в node.js хотя?
2. Как вы используете это для вещей, которые происходят перед main() ?