Проблемы
Рассмотрим следующий сценарий.
-
Вы запускаете приложение Windows Presentation Foundation (WPF) на основе Microsoft .NET Framework 3.5 с пакетом обновления 1 (SP1).
-
Приложение WPF использует конвейер аппаратной отрисовки.
-
Приложение загружает и выгружает множество доменов приложений, содержащих один или несколько пользовательских компонентов надстройки WPF.
В этом сценарии приложение сталкивается с исключением System.Runtime.InteropServices.COMException, а затем происходит сбой приложения.
Решение
Сведения об исправлении
Поддерживаемое исправление доступно в корпорации Майкрософт. Однако это исправление предназначено для устранения только проблемы, описанной в этой статье. Примените это исправление только к системам, в которых возникла эта проблема. Это исправление может пройти дополнительное тестирование. Поэтому, если эта проблема не затрагивает вас, рекомендуется дождаться следующего обновления программного обеспечения, содержащего это исправление. Чтобы скачать это исправление из коллекции кода MSDN, посетите следующий веб-сайт Майкрософт:
http://code.msdn.microsoft.com/KB2276690Примечание. В коллекции кода MSDN отображаются языки, для которых доступно исправление. Если вы не видите свой язык в списке, это связано с тем, что страница ресурсов коллекции кода недоступна для этого языка. Примечание. Если возникают дополнительные проблемы или требуется устранить неполадки, может потребоваться создать отдельный запрос на обслуживание. Обычные затраты на поддержку будут применяться к дополнительным вопросам и проблемам, которые не относятся к данному исправлению. Полный список телефонных номеров службы поддержки и поддержки Майкрософт или создание отдельного запроса на обслуживание см. на следующем веб-сайте Майкрософт:
http://support.microsoft.com/contactus/?ws=support
Предварительные условия
Чтобы применить это исправление, необходимо установить .NET Framework 3.5 с пакетом обновления 1 (SP1).
Требование перезагрузки
После применения этого исправления не нужно перезагружать компьютер.
Сведения о замене исправлений
Это исправление не заменяет никаких других исправлений.
Сведения о файле
Английская версия исправления содержит файлы с атрибутами, указанными в следующей таблице, или более поздние. Даты и время для файлов указаны в формате времени UTC. При просмотре сведений о файлах выполняется перевод соответствующих значений в местное время. Чтобы узнать разницу между временем UTC и местным временем, откройте вкладку Часовой пояс элемента Дата и время панели управления.
Для всех поддерживаемых x86-разрядных версий Windows Server 2003 и Windows XP
|
Имя файла |
Версия файла |
Размер |
дата |
Время |
Платформа |
|---|---|---|---|---|---|
|
Presentationcore.dll |
3.0.6920.4033 |
4,218,880 |
02 сентября 2010 г. |
01:32 |
x86 |
|
Presentationframework.dll |
3.0.6920.4033 |
5,279,744 |
02 сентября 2010 г. |
01:28 |
x86 |
|
Presentationhost.exe |
4.0.40305.0 |
295,264 |
02 сентября 2010 г. |
01:28 |
x86 |
|
Presentationhostdll.dll |
3.0.6920.4033 |
130,408 |
02 сентября 2010 г. |
01:32 |
x86 |
|
Presentationhostproxy.dll |
4.0.31106.0 |
99,176 |
02 сентября 2010 г. |
01:32 |
x86 |
|
Windowsbase.dll |
3.0.6920.4033 |
1,249,280 |
02 сентября 2010 г. |
01:32 |
x86 |
Для всех поддерживаемых 64-разрядных версий Windows Server 2003 и Windows XP
|
Имя файла |
Версия файла |
Размер |
дата |
Время |
Платформа |
|---|---|---|---|---|---|
|
Presentationcore.dll |
3.0.6920.4033 |
3,997,696 |
02 сентября 2010 г. |
00:53 |
x64 |
|
Presentationframework.dll |
3.0.6920.4033 |
4,636,672 |
02 сентября 2010 г. |
00:48 |
x64 |
|
Presentationhost.exe |
4.0.31106.0 |
320,352 |
02 сентября 2010 г. |
00:48 |
x64 |
|
Presentationhostdll.dll |
3.0.6920.4033 |
171,368 |
02 сентября 2010 г. |
00:53 |
x64 |
|
Presentationhostproxy.dll |
4.0.31106.0 |
109,928 |
02 сентября 2010 г. |
00:53 |
x64 |
|
Windowsbase.dll |
3.0.6920.4033 |
1,110,016 |
02 сентября 2010 г. |
00:53 |
x64 |
Для всех поддерживаемых x86-разрядных версий Windows Vista с пакетом обновления 2 (SP2) и Windows Server 2008 с пакетом обновления 2 (SP2)
|
Имя файла |
Версия файла |
Размер |
дата |
Время |
Платформа |
|---|---|---|---|---|---|
|
Presentationcore.dll |
3.0.6920.4033 |
4,218,880 |
09 сентября 2010 г. |
10:52 |
x86 |
|
Presentationfontcache.exe.config |
Not Applicable |
161 |
03 апреля 2009 г. |
21:25 |
Not Applicable |
|
Wpfgfx_v0300.dll |
3.0.6920.4003 |
1,736,024 |
17 июня 2009 г. |
08:03 |
x86 |
|
Presentationframework.dll |
3.0.6920.4033 |
5,279,744 |
09 сентября 2010 г. |
10:52 |
x86 |
|
Presentationhostdll.dll |
3.0.6920.4033 |
130,408 |
09 сентября 2010 г. |
10:52 |
x86 |
|
Windowsbase.dll |
3.0.6920.4033 |
1,249,280 |
09 сентября 2010 г. |
10:52 |
x86 |
Для всех поддерживаемых 64-разрядных версий Windows Vista с пакетом обновления 2 (SP2) и Windows Server 2008 с пакетом обновления 2 (SP2)
|
Имя файла |
Версия файла |
Размер |
дата |
Время |
Платформа |
|---|---|---|---|---|---|
|
Presentationcore.dll |
3.0.6920.4033 |
3,997,696 |
09 сентября 2010 г. |
10:52 |
x64 |
|
Presentationfontcache.exe.config |
Not Applicable |
161 |
03 апреля 2009 г. |
20:58 |
Not Applicable |
|
Wpfgfx_v0300.dll |
3.0.6920.4003 |
2,254,168 |
17 июня 2009 г. |
08:03 |
x64 |
|
Presentationframework.dll |
3.0.6920.4033 |
4,636,672 |
09 сентября 2010 г. |
10:52 |
x64 |
|
Presentationhostdll.dll |
3.0.6920.4033 |
171,368 |
09 сентября 2010 г. |
10:52 |
x64 |
|
Windowsbase.dll |
3.0.6920.4033 |
1,110,016 |
09 сентября 2010 г. |
10:52 |
x64 |
Для всех поддерживаемых x86-разрядных версий Windows 7
|
Имя файла |
Версия файла |
Размер |
дата |
Время |
Платформа |
|---|---|---|---|---|---|
|
Presentationcore.dll |
3.0.6920.5012 |
4,218,880 |
11 сентября 2010 г. |
01:29 |
x86 |
|
Presentationfontcache.exe.config |
Not Applicable |
161 |
10 июня 2009 г. |
21:14 |
Not Applicable |
|
Wpfgfx_v0300.dll |
3.0.6920.4902 |
1,736,536 |
10 июня 2009 г. |
21:14 |
x86 |
|
Presentationframework.dll |
3.0.6920.5012 |
5,279,744 |
11 сентября 2010 г. |
01:29 |
x86 |
|
Presentationhostdll.dll |
3.0.6920.5012 |
130,408 |
11 сентября 2010 г. |
01:29 |
x86 |
|
Presentationhost.exe |
4.0.31106.0 |
295,264 |
11 сентября 2010 г. |
01:29 |
x86 |
|
Presentationhostproxy.dll |
4.0.31106.0 |
99,176 |
11 сентября 2010 г. |
01:29 |
x86 |
|
Windowsbase.dll |
3.0.6920.5012 |
1,253,376 |
11 сентября 2010 г. |
01:29 |
x86 |
Все поддерживаемые 64-разрядные (x64) версии Windows 7 и Windows Server 2008 R2
|
Имя файла |
Версия файла |
Размер |
дата |
Время |
Платформа |
|---|---|---|---|---|---|
|
Presentationcore.dll |
3.0.6920.5012 |
3,997,696 |
11 сентября 2010 г. |
01:28 |
x64 |
|
Presentationfontcache.exe.config |
Not Applicable |
161 |
10 июня 2009 г. |
20:30 |
Not Applicable |
|
Wpfgfx_v0300.dll |
3.0.6920.4902 |
2,255,176 |
10 июня 2009 г. |
20:30 |
x64 |
|
Presentationframework.dll |
3.0.6920.5012 |
4,636,672 |
11 сентября 2010 г. |
01:28 |
x64 |
|
Presentationhostdll.dll |
3.0.6920.5012 |
171,368 |
11 сентября 2010 г. |
01:28 |
x64 |
|
Presentationhost.exe |
4.0.31106.0 |
320,352 |
11 сентября 2010 г. |
01:28 |
x64 |
|
Presentationhostproxy.dll |
4.0.31106.0 |
109,928 |
11 сентября 2010 г. |
01:28 |
x64 |
|
Windowsbase.dll |
3.0.6920.5012 |
1,114,112 |
11 сентября 2010 г. |
01:28 |
x64 |
Статус
Корпорация Майкрософт подтверждает наличие этой проблемы в своих продуктах, которые перечислены в разделе "Применяется к".
Обходное решение
Чтобы обойти эту проблему, отключите конвейер аппаратной отрисовки, а затем включите конвейер программной отрисовки. Чтобы отключить конвейер аппаратной отрисовки и включить конвейер программной отрисовки, используйте один из следующих методов:
-
Задайте перечисление System.Windows.Interop.RenderMode.Ниже приведен пример кода, который задает перечисление System.Windows.Interop.RenderMode для включения конвейера программной отрисовки при загрузке окна WPF:
private void OnLoaded(object sender, EventArgs e){System.Windows.Interop.HwndSource hwndSource = PresentationSource.FromVisual(this) as System.Windows.Interop.HwndSource;System.Windows.Interop.HwndTarget hwndTarget = hwndSource.CompositionTarget; hwndTarget.RenderMode = System.Windows.Interop.RenderMode.SoftwareOnly;}
-
Задайте раздел реестра DisableHWAcceleration .Важно! В этом разделе, методе или задаче содержатся инструкции по изменению реестра. Однако неправильное изменение параметров реестра может привести к возникновению серьезных проблем. Поэтому следует точно выполнять приведенные инструкции. В качестве дополнительной защитной меры перед изменением реестра необходимо создать его резервную копию. Это позволит восстановить реестр в случае возникновения проблем. Дополнительные сведения о создании резервной копии и восстановлении реестра см. в следующей статье базы знаний Майкрософт:
322756 Резервное копирование и восстановление реестра в Предупреждении Windows. Этот метод отключает конвейер отрисовки оборудования для всех приложений WPF на компьютере. Поэтому метод обычно не рекомендуется, за исключением случаев, когда клиенты управляют средами и не возражают против эффекта для всех приложений WPF.
-
Нажмите кнопку Пуск, нажмите кнопку Выполнить, введите regedit и нажмите клавишу ВВОД.
-
Найдите и откройте следующий подраздел реестра:
HKEY_CURRENT_USER\SOFTWARE\Microsoft\Avalon.Graphics
-
Задайте для записи реестра DisableHWAcceleration значение 1.Примечание. Если запись реестра DisableHWAcceleration не существует, щелкните правой кнопкой мыши подраздел реестра, наведите указатель мыши на пункт Создать и выберите пункт Строковое значение , чтобы создать запись реестра. Введите DisableHWAcceleration в поле имени новой записи реестра, дважды щелкните DisableHWAcceleration и измените значение значения DisableHWAcceleration на 1.
-
Закройте редактор реестра.
-
Дополнительная информация
Дополнительные сведения о конвейере отрисовки программного обеспечения см. на следующем веб-сайте Microsoft Developer Network (MSDN):Общие сведения о конвейереотрисовки программного обеспечения. Дополнительные сведения о параметрах реестра для отрисовки WPF см. на следующем веб-сайте MSDN:Общие сведения о параметрах реестра для отрисовки WPF.Дополнительные сведения о перечислении System.Windows.Interop.RenderMode см. на следующем веб-сайте MSDN:Общие сведения о перечислении System.Windows.Interop.RenderMode