Сохранить сообщения об ошибках Windows из зависшего приложения

Приложение иногда зависает, и я хотел бы увидеть дамп в то время, чтобы выяснить это. Я написал приложение, которое пользователь может запустить, чтобы автоматически создать дамп, на который я могу смотреть. Однако я не могу заставить пользователей вспомнить его запуск, когда он зависает, что бы я ни пытался. Они всегда заканчивают тем, что закрывали программу, которая вызывает Windows Error Reporting.

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

Стать независимым поставщиком программного обеспечения и получать эту информацию с серверов отчетов Microsoft об ошибках - это одно из решений, но не то, которое в настоящий момент является реалистичным.

Я не могу себе представить, что я единственный, кто столкнулся с этой проблемой. Это программное обеспечение используется одновременно десятками и десятками сотрудников, поэтому они достигают их всех и заставляют их запускать приложение или не нажимать кнопку «Закрыть» в этом диалоговом окне, пока не запустится какое-либо другое приложение или что-то подобное.

Приложение работает на Windows Server 2003. Очень плохо, так как я знаю, что в Server 2008 есть несколько опций LocalDumps, которые позволят мне их сохранить.

Есть какие-нибудь идеи как-то сохранить эти свалки, чтобы я мог их проанализировать? Препятствием является пользователь в том смысле, что я принял его упрямство и не ожидаю, что он запустит какое-либо другое приложение или сделает что-то особенное.

Спасибо за любой совет!

1 ОТВЕТ

Вы можете выбрать автоматическое решение. Я полагаю, что в вашем распоряжении есть несколько вариантов, чтобы определить, зависли ли вы.

Одним из них может быть использование SendMessageTimeout (также обратите внимание на SMTO_ABORTIFHUNG в качестве одного из значений fuFlags) из отдельного потока в вашем приложении. Как только вы определили, что основной поток не отвечает, вы можете сохранить файл дампа в любом месте. Существует также IsHungAppWindow () (user32.dll), доступный с w2k.

1
11.12.2008 09:01:35