Скрыть нарушение прав доступа в другом приложении - PullRequest
0 голосов
/ 19 марта 2010

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

Возможно ли, чтобы другое приложение запустило глючное приложение и перехватило исключение Access Violation, если оно произошло? Если да, то как?

Заранее спасибо!

Ответы [ 2 ]

2 голосов
/ 20 марта 2010

Да, если другое приложение является отладчиком. Это нетривиальный объем работы. Чтобы стать отладчиком, вы создаете процесс с помощью DEBUG_PROCESS | Флаг DEBUG_ONLY_THIS_PROCESS, см. Флаги CreateProcess для получения дополнительной информации.

Как только вы станете отладчиком процесса, вы получите первый шанс обработать все исключения.

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

1 голос
/ 23 марта 2010

Позвоните SetErrorMode(SEM_NOGPFAULTERRORBOX) перед запуском глючного приложения как дочернего процесса.

Режим ошибки наследуется дочерним процессам, и этот конкретный флаг предотвратит появление диалогового окна сбоя.

...