IE с использованием mshtmled.dll. Но что такое mshtmled.dll?

У меня есть веб-приложение, которое время от времени переводит IE в зависшее состояние, когда IE использует 100% ЦП. Единственный выход - прекратить процесс IE.

Когда я смотрю на трассировку стека потока, который зависает в iexplore.exe, я вижу, что стек проходит через mshtmled.dll. Я привык видеть mshtml.dll в этих следах стека, но не mshtmled.dll.

Вызываемые методы заставляют вас думать, что на странице есть редактор (например, CSelectionManager::SetEditContext или CSelectionManager::EnsureEditContextClick), но у меня на странице не используется редактор HTML (например, редактор FCK в YUI RTE).

Так что мне действительно интересно: как mshtmled.dll используется IE?

Пытаюсь отключить mshtmled.dll

@VonC предложил в комментариях отключить mshtmled.dll через диалоговое окно «Управление надстройками», которое вы получаете на вкладке «Программы» в настройках обозревателя. После отключения этой dll и перезапуска IE я вижу, что она отключена:

альтернативный текст http://img.skitch.com/20090226-c9e9ygek8i6a7di3jijang2x317k

Однако после этого я все еще могу воспроизвести проблему, и я действительно вижу (ах!) Mshtmled.dll используется в трассировке стека зависшего потока:

http://img.skitch.com/20090226-m3167dxb8iaax3wgy22eatruyp.png

Исправление Microsoft

У Microsoft есть исправление для mshtmled.dll, устраняющее проблему, очень похожую на ту, которую я наблюдаю. Но это исправление, скорее всего, установлено на машинах, на которых мы можем воспроизвести проблему, поскольку у нас есть SP3. Мне кажется, что проблема, с которой я столкнулся, аналогична той, что была исправлена. Я просто упоминаю об этом здесь на тот случай, если кто-то сочтет это полезным.


person Community    schedule 26.02.2009    source источник
comment
О ... раз уж у нас SP3: вы имеете в виду, что работаете с IE6? Эта небольшая информация могла бы пригодиться, если бы мы знали ее раньше;)   -  person VonC    schedule 27.02.2009
comment
@VonC Да, по крайней мере, в моей среде у меня IE6 и SP3. Не уверен, что есть у других людей, которые воспроизводят эту проблему. Но я не уверен, что понимаю ваш комментарий; как это помогает?   -  person avernet    schedule 27.02.2009
comment
Потому что у нас много prb с IE6SP3 на работе ... но только со старым настольным компьютером Hp (2002-2003). Никакая интенсивная загрузка ЦП не проявляется на более поздних версиях настольных компьютеров или более поздних версиях IE.   -  person VonC    schedule 28.02.2009
comment
@VonC Понятно. В этом случае IE застревает и навсегда использует 100% CUP. Так что наличие новейшего лучшего оборудования не имеет большого значения.   -  person avernet    schedule 01.03.2009
comment
Нет ответа? Может настало время щедрости (хотя я не совсем за то, как это реализовано сейчас;)): stackoverflow.com/questions/ 359727   -  person VonC    schedule 04.03.2009
comment
Да, до сих пор нет ответа. Я отложил это на второй план и обязательно обновлю его, если что-то найду.   -  person avernet    schedule 05.03.2009


Ответы (1)


Как эта ветка предлагает, вы можете использовать такой инструмент, как fiddlertool, чтобы проанализировать свой HTML-трафик и проверьте, что вызывает это состояние зависания.

Поскольку mshtmled.dll обрабатывает HTML-редактирование на веб-странице, что-то в этом HTML-трафике должно запускать вызов mshtmled.


Как упоминает Алессандро в комментарии, активен JavaScript, и, поскольку mshtmled.dll связан с «манипуляциями с элементами DOM», возможно, что JavaScript действительно запускает эти вызовы mshtmled.
Отказ от ответственности: «манипуляции с DOM» - это не совсем его основная функция, поскольку mshtmled.dll описывается как часть исходной главной страницы. . Возможно, это модуль IE, который можно отключить как компонент ActiveX с именем «HtmlDlgSafeHelper».

Управление надстройками

Выберите «Управление надстройками - надстройки, которые запускаются без разрешения», и вы должны увидеть mshtmled.dll в столбце «Файл».

Может быть, этот объект запрашивается каким-то JavaScript, например:

var a = new ActiveXObject('HtmlDlgSafeHelper.HtmlDlgSafeHelper');
a.fonts = ...;
person VonC    schedule 26.02.2009
comment
@VonC, спасибо за указатель на ветку. Кажется, у этого человека точно такая же проблема. Я продолжил эту тему. Но предложение использовать Fiddler не помогает, потому что ответ Ajax уже был обработан IE во время сбоя. - person avernet; 26.02.2009
comment
@VonC, добавляю к моему предыдущему комментарию: похоже, нет большой корреляции между содержимым ответа Ajax и фактом зависания. Также есть JavaScript, работающий в соответствии с трассировками стека, которые я вижу. - person avernet; 26.02.2009
comment
@Alessandro: так как mshtmled.dll связан с манипуляциями с элементами DOM, возможно, виноват Javascript ... - person VonC; 26.02.2009
comment
@VonC, почему вы думаете, что mshtmled.dll имеет отношение к манипуляциям с DOM-элементами. Я не говорю, что это не так, и, судя по названию, это имеет смысл, но есть ли у вас другие признаки? Личный опыт, документация? - person avernet; 26.02.2009
comment
@Alessandro: нет, я только понял это из различных описаний dll, которые я видел в сети. Я обновил свой ответ, включив в него возможность деактивировать этот элемент управления ActiveX. Может быть, этого будет достаточно. Дайте нам знать. - person VonC; 26.02.2009
comment
amazon.com/Professional-Web-Programming-Wrox-Guides/ dp / Riiiight ... Может быть, вы уже изучили руководство по надстройкам;) - person VonC; 26.02.2009
comment
@VonC, отличная идея! Я пробовал это, но mshtmled.dll все еще используется. Я обновил вопрос, добавив дополнительную информацию об этом (см., Что находится в разделе «Попытка отключить mshtmled.dll»). - person avernet; 27.02.2009
comment
@VonC, похоже, ты меня нашел :). - person avernet; 27.02.2009