Назад | Перейти на главную страницу

Как диагностировать зависание при создании новой папки в explorer.exe

У меня возникли проблемы с зависанием explorer.exe при создании новой папки.

Если я использую Analyze Wait Chain в Resource Monitor, он говорит: «Один или несколько потоков explorer.exe ожидают завершения сетевого ввода-вывода».

Когда я смотрю на проблемную ветку в Process Explorer, она не обнаруживает ничего интересного:

ntdll.dll!ZwWaitForMultipleObjects+0xa 
KERNELBASE.dll!GetCurrentThread+0x36 
kernel32.dll!WaitForMultipleObjectsEx+0xb3 
USER32.dll!PeekMessageW+0x1cd 
USER32.dll!MsgWaitForMultipleObjectsEx+0x2a 
USER32.dll!MsgWaitForMultipleObjects+0x20 
SHELL32.dll!SHAppBarMessage+0x41e 
SHELL32.dll!DragAcceptFiles+0x2a3c 
SHELL32.dll!DragAcceptFiles+0x2a4f 
SHELL32.dll!Ordinal211+0x124 
SHELL32.dll!SHChangeNotification_Unlock+0x12f4 
USER32.dll!GetSystemMetrics+0x2b1 
USER32.dll!IsDialogMessageW+0x19b 
USER32.dll!IsDialogMessageW+0x1e1 
ntdll.dll!KiUserCallbackDispatcher+0x1f 
USER32.dll!PeekMessageW+0xba 
USER32.dll!PeekMessageW+0x89 
SHELL32.dll!SHChangeNotification_Unlock+0xd9f 
SHELL32.dll!Ordinal885+0x1407 
SHLWAPI.dll!SHRegGetUSValueW+0x306 
kernel32.dll!BaseThreadInitThunk+0xd 
ntdll.dll!RtlUserThreadStart+0x21

Пока я смотрел на потоки explorer.exe, я заметил довольно много, в которых говорится об ETW (трассировке событий для Windows), поэтому очевидно, что explorer.exe использует трассировку.

Поэтому я решил попробовать и пользователя TraceView.exe попытаться прослушать следы explorer.exe.

Проблема в том, что TraceView требует некоторых труднодоступных вещей ... либо pdbs, либо файлов CTL, либо файлов .TMF. Я попытался использовать explorer.pdb, поставляемый с Windows SDK, но это не сработало. Я не вижу explorer.exe в «названных провайдерах». И я понятия не имею, где найти файлы ctl или .TMF для explorer.exe.

Возникает вопрос: есть ли способ просмотреть сообщения трассировки ETW из проводника?

Или я просто не буду беспокоиться и вернусь к вековой технике отключения каждого расширения проводника одно за другим в надежде, что это одно из них. (Предпочитаю первое, поскольку мне нравится разбираться в вещах !!)

Я не знаю, видели ли вы их, но Марк Руссинович из Microsoft (бывший сотрудник SysInternals, который изначально написал Process Explorer) регулярно пишет в своем блоге статьи о диагностике проблем Windows с помощью инструментов Sysinternals.

Этот демонстрирует свой процесс, когда он пытается отследить периодическое зависание проводника (которое почти наверняка не то же самое, что ваше, но показывает процесс, который он использует) http://blogs.technet.com/markrussinovich/archive/2005/08/28/the-case-of-the-intermittent-and-annoying-explorer-hangs.aspx

Он использует другие методы (в том числе захват символов с серверов MS) для диагностики низкой производительности Windows здесь: http://blogs.technet.com/markrussinovich/archive/2008/09/24/3126858.aspx

Первое, что я бы сделал, это запустил chkdsk на рассматриваемом диске. Сначала исключите самые простые причины.

Решение, представленное Скоттом, работает идеально.

Я использую Windows 7 (64-разрядную версию) на Dell Inspiron 1564.

Кажется, это ошибка, присущая 7.

Это происходит со мной постоянно в Windows 7 после выхода из спящего режима. И «Новая папка», и «Переименовать папку» приводят к долгому зависанию explorer.exe. В конце концов возвращается, но убивает ту инерцию, которая у вас была. Немного неприятно видеть это на новом ноутбуке W7.

Мое решение: запустить диспетчер задач. Убить explorer.exe. Панель задач исчезнет. Файл -> Новая задача -> explorer.exe. Панель задач должна появиться снова. Закройте диспетчер задач

Проблема была немедленно устранена. Но он вернется сегодня вечером ...