Предотвращение, предотвращение или обход AppCrash - PullRequest
4 голосов
/ 18 августа 2011

Мы получаем, казалось бы, случайный AppCrash, где Windows фактически берет на себя процесс и закрывает его, предоставляя некоторый непонятный отчет об отладке, который включает в себя такие вещи, как NTDLL.dll, StackHash, User32.dll и т. Д. Исследование этих модулей и информации в отчетах более года дает немного больше информации, чем мы имели раньше. Лучшее, что нам удалось сделать, - это сузить ее до библиотеки DLL, которую наше приложение использует для взаимодействия с частью аппаратного обеспечения, которая взаимодействует через TCP / IP. У нас нет контроля над этой внешней библиотекой, мы должны ее использовать, и учитывая тот факт, что проблема является случайной (не может дублироваться с нашей стороны, решается при перезагрузке ПК), мы, похоже, застряли с ней.

Проблема в том, что наше приложение должно работать 24/7 на инструменте, который не контролируется человеком. Мне нужно определить, когда наше приложение дает сбой, и выполнить команду перезагрузки для всего этого. Проблема заключается в обнаружении AppCrash; Внутри приложения не генерируются исключения (AppCrash является внешним по отношению к приложению), и никакие журналы не генерируют никаких признаков закрытия программы.

Мы хотели бы запустить службу, которая проверяет, работает приложение или нет, и если нет, выдает команду перезагрузки для перезапуска системы. Однако, когда отображается диалог AppCrash, он оставляет процесс запущенным.

Есть ли способ либо предотвратить эти уведомления AppCrash, либо обойти их, либо настроить их как минимум на первое закрытие программы? Пожалуйста, не указатели на stackhash.com или использование отчетов об ошибках MS; эти устройства не поддерживают интернет. Мы также не можем исправить какую-либо ошибку в используемой нами DLL (поставщик OEM не работает).

Ответы [ 3 ]

6 голосов
/ 19 августа 2011

Один из подходов может состоять в том, чтобы приложение периодически сообщало другому сервису, что оно работает и работает нормально, вместо того, чтобы пытаться определить, когда оно выходит из строя.Используя IPC, вы можете посылать контрольное сообщение службе мониторинга раз в секунду.

3 голосов
/ 19 августа 2011

Вы можете создать приложение-оболочку, которое взаимодействует с DLL, и ваше приложение может запускать эту оболочку как отдельный процесс и общаться только с приложением-оболочкой (например, через MemoryMappedFile и с именем Mutex).Таким образом, ваше приложение не подвергается прямому влиянию, когда происходит такой AppCrash (уничтожается только оболочка) - тогда он может автоматически принимать меры, которые вы считаете необходимыми (например, заставить диалог исчезнуть и / или использовать Process.Kill, чтобы избавиться отэто ...).

Вы даже можете сделать эту оболочку службой Windows, для которой вы, в свою очередь, настраиваете автоматическую перезагрузку при сбое (в MMC / Services).

Другим пунктом было бынастроить ОС на автоматическую перезагрузку в таком случае (ЕСЛИ это классифицируется как системная ошибка, то вы можете настроить такое поведение).

РЕДАКТИРОВАТЬ - согласно комментарию некоторые ссылки на информацию MemoryMappedFile:

0 голосов
/ 16 января 2012

Примите во внимание совет: http://forums.techguy.org/windows-7/1032392-solved-all-browsers-crashing-windows.html

В консоли администратора:

Reset WINSOCK entries to installation defaults: netsh winsock reset catalog
Reset IPv4 TCP/IP stack to installation defaults: netsh int ipv4 reset reset.log
Reset IPv6 TCP/IP stack to installation defaults: netsh int ipv6 reset reset.log

Это исправило те же проблемы со стековым хешем, которые у меня были с Firefox и Chrome.Это похоже на общее разрешение tcp / ip, которое может также решить проблемы tcp / ip вашего приложения.

Я предполагаю, что эти настройки как-то вышли из строя - у меня на компьютере есть pcap и другие инструменты, так что, возможно,они конфликтуют?Не знаюВы возились с сетевым стеком или настройками устройства?

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