Перенаправление сообщений об ошибках диалогового окна Windows на консоль

#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() ?