Приложения запускаются, но не показывают интерфейс
Я пытался запускать приложения как обычно из меню Пуск Windows. Через ~ 30 минут я получил следующие эффекты:
- приложения с графическим интерфейсом больше не отображаются.
- Я могу продолжать использовать приложения GUI, которые уже открыты
- Я могу открыть не-GUI / консольные приложения (например,
cmd
). - В командной строке я вижу, что приложения с графическим интерфейсом запускаются с использованием
tasklist
Вот пример:
>tasklist | find "taskmgr"
taskmgr.exe 4352 Console 1 7.216 K
taskmgr.exe 7824 Console 1 7.216 K
taskmgr.exe 7232 Console 1 7.232 K
Как вы можете себе представить, я пытался запустить диспетчер задач, чтобы диагностировать проблему 3 раза. Но ни одно из окон диспетчера задач не стало видимым.
При условии, что tasklist
отображает процессы в том порядке, в котором они были запущены, я примерно определила проблему:
...
openAgent.exe 7012 Console 1 592.440 K Not Responding
...
WerFault.exe 3592 Console 1 10.112 K Unknown
...
openAgent
это приложение, которое я закрыл (или, по крайней мере, пытался закрыть, так как оно все еще работает). Что-то должно быть разбито из-за присутствия WerFault
, но я не вижу диалоговое окно отчетов об ошибках Windows.
Завершение openAgent
приложение принудительно используя taskkill /pid 7012 /f
все приложения, которые я пытался запустить, внезапно появились.
Глядя на диалоговое окно Windows Error Reporting, оно показывает исключение 80000003
, которая является (отладкой) точкой останова.
Что здесь произошло? Я хотел бы понять ситуацию с точки зрения внутренних компонентов Windows. Теоретически я ожидаю, что сбой приложения в пользовательском режиме не сможет повлиять на другие приложения.
К сожалению, у меня нет ни дампа ситуации, ни аварийного дампа режима пользователя openAgent
так что это вся информация, которую я могу вам дать.
Моя система - Windows 7 SP1 x64 Enterprise, нет ожидающих обновлений Windows, процессор Intel Core i7. openAgent
это исполняемый файл SilkTest от MicroFocus, инструмента автоматизации тестирования.
1 ответ
Я мог бы воспроизвести проблему еще раз, и оказалось, что openAgent
устанавливает крюк под названием OsHookDll_x86
из той же компании.
Этот крюк относится к DispatchHookW()
:
2:010> k
...
0049f2b0 75a86381 OsHookDll_x86!GetMessageHook+0x37
0049f2cc 75a780a9 USER32!DispatchHookW+0x38
...
0049f544 5eff5709 USER32!PeekMessageW+0x108
который влияет на цикл сообщений Windows. Цикл сообщений Windows необходим для запуска любого приложения с графическим интерфейсом.
Хук отправляет сообщения Windows openAgent
с помощью USER32!SendMessageW()
но openAgent
было приостановлено Windows Error Reporting (WerFault
) и поэтому не может обрабатывать такие сообщения, что приводит к превышению времени ожидания:
1:009> k
ChildEBP RetAddr
00138f90 75a79886 USER32!NtUserMessageCall+0x15
00138fcc 75a797f3 USER32!SendMessageTimeoutWorker+0xa6
00138ff4 59d6066c USER32!SendMessageTimeoutW+0x21
...
Я не мог полностью проанализировать все остальное, поскольку во время сеанса отладки все остальное также начало зависать. Я предполагаю, что ловушка пытается переслать сообщение вместо возврата, что приводит к бесконечному циклу.
!analyze -v
не работает из-за отсутствия символов дляntdll
,