Symptomy
Rozpatrzmy następujący scenariusz:
-
Uruchom aplikację Programu Microsoft .NET Framework 3.5 z dodatkiem Service Pack 1 (SP1) opartą na programie Windows Presentation Foundation (WPF).
-
Aplikacja WPF używa potoku renderowania sprzętowego.
-
Aplikacja ładuje i zwalnia wiele domen aplikacji, które zawierają jeden lub więcej niestandardowych składników dodatku WPF.
W tym scenariuszu aplikacja napotka wyjątek System.Runtime.InteropServices.COMException, a następnie aplikacja ulega awarii.
Rozwiązanie
Informacje dotyczące poprawek
Obsługiwana poprawka jest dostępna od firmy Microsoft. Jednak ta poprawka ma na celu naprawienie tylko problemu opisanego w tym artykule. Zastosuj tę poprawkę tylko do systemów, w których występuje ten konkretny problem. Ta poprawka może wymagać dodatkowych testów. Dlatego jeśli ten problem cię nie dotyczy poważnie, zalecamy zaczekanie na kolejną aktualizację oprogramowania zawierającą tę poprawkę. Aby pobrać tę poprawkę z galerii kodów MSDN, odwiedź następującą witrynę internetową firmy Microsoft:
http://code.msdn.microsoft.com/KB2276690Uwaga Galeria kodów MSDN zawiera języki, dla których jest dostępna poprawka. Jeśli nie widzisz swojego języka na liście, oznacza to, że strona zasobu Galeria kodów nie jest dostępna dla tego języka. Uwaga Jeśli wystąpią dodatkowe problemy lub jest wymagane jakiekolwiek rozwiązywanie problemów, może być konieczne utworzenie osobnego żądania usługi. Typowe koszty pomocy technicznej będą miały zastosowanie do dodatkowych pytań dotyczących pomocy technicznej i problemów, które nie kwalifikują się do danej poprawki. Aby uzyskać pełną listę numerów telefonów działu obsługi klienta i pomocy technicznej firmy Microsoft lub utworzyć oddzielne żądanie obsługi, odwiedź następującą witrynę internetową firmy Microsoft:
http://support.microsoft.com/contactus/?ws=support
Wymagania wstępne
Aby zastosować tę poprawkę, musisz mieć zainstalowany dodatek Service Pack 1 (SP1) programu .NET Framework 3.5.
Wymaganie ponownego uruchomienia
Po zastosowaniu tej poprawki nie trzeba ponownie uruchamiać komputera.
Informacje dotyczące zastępowania poprawek
Ta poprawka nie zastępuje żadnej innej poprawki.
Informacje o plikach
Angielska wersja tej poprawki zawiera atrybuty plików (lub nowsze atrybuty plików) wymienione w poniższej tabeli. Daty i godziny dla tych plików są wymienione w uniwersalnym czasie koordynowanym (UTC). Podczas wyświetlania informacji o pliku są konwertowane na czas lokalny. Aby znaleźć różnicę między czasem UTC a czasem lokalnym, użyj karty Strefa czasowa w elemencie Data i godzina w Panelu sterowania.
Dla wszystkich obsługiwanych wersji systemu Windows Server 2003 i Windows XP opartych na architekturze x86
|
Nazwa pliku |
Wersja pliku |
Rozmiar pliku |
Data |
Godzina |
Podest |
|---|---|---|---|---|---|
|
Presentationcore.dll |
3.0.6920.4033 |
4,218,880 |
02-wrz-2010 |
01:32 |
x86 |
|
Presentationframework.dll |
3.0.6920.4033 |
5,279,744 |
02-wrz-2010 |
01:28 |
x86 |
|
Presentationhost.exe |
4.0.40305.0 |
295,264 |
02-wrz-2010 |
01:28 |
x86 |
|
Presentationhostdll.dll |
3.0.6920.4033 |
130,408 |
02-wrz-2010 |
01:32 |
x86 |
|
Presentationhostproxy.dll |
4.0.31106.0 |
99,176 |
02-wrz-2010 |
01:32 |
x86 |
|
Windowsbase.dll |
3.0.6920.4033 |
1,249,280 |
02-wrz-2010 |
01:32 |
x86 |
Dla wszystkich obsługiwanych wersji systemu Windows Server 2003 i Windows XP opartych na procesorach x64
|
Nazwa pliku |
Wersja pliku |
Rozmiar pliku |
Data |
Godzina |
Podest |
|---|---|---|---|---|---|
|
Presentationcore.dll |
3.0.6920.4033 |
3,997,696 |
02-wrz-2010 |
00:53 |
x64 |
|
Presentationframework.dll |
3.0.6920.4033 |
4,636,672 |
02-wrz-2010 |
00:48 |
x64 |
|
Presentationhost.exe |
4.0.31106.0 |
320,352 |
02-wrz-2010 |
00:48 |
x64 |
|
Presentationhostdll.dll |
3.0.6920.4033 |
171,368 |
02-wrz-2010 |
00:53 |
x64 |
|
Presentationhostproxy.dll |
4.0.31106.0 |
109,928 |
02-wrz-2010 |
00:53 |
x64 |
|
Windowsbase.dll |
3.0.6920.4033 |
1,110,016 |
02-wrz-2010 |
00:53 |
x64 |
Dla wszystkich obsługiwanych x86 wersji systemu Windows Vista z dodatkiem Service Pack 2 (SP2) i Windows Server 2008 z dodatkiem Service Pack 2 (SP2)
|
Nazwa pliku |
Wersja pliku |
Rozmiar pliku |
Data |
Godzina |
Podest |
|---|---|---|---|---|---|
|
Presentationcore.dll |
3.0.6920.4033 |
4,218,880 |
09-wrz-2010 |
10:52 |
x86 |
|
Presentationfontcache.exe.config |
Nie dotyczy |
161 |
03-kwi-2009 |
21:25 |
Nie dotyczy |
|
Wpfgfx_v0300.dll |
3.0.6920.4003 |
1,736,024 |
17 czerwca 2009 r. |
08:03 |
x86 |
|
Presentationframework.dll |
3.0.6920.4033 |
5,279,744 |
09-wrz-2010 |
10:52 |
x86 |
|
Presentationhostdll.dll |
3.0.6920.4033 |
130,408 |
09-wrz-2010 |
10:52 |
x86 |
|
Windowsbase.dll |
3.0.6920.4033 |
1,249,280 |
09-wrz-2010 |
10:52 |
x86 |
Dla wszystkich obsługiwanych wersji systemu Windows Vista z dodatkiem SP2 i Windows Server 2008 z dodatkiem SP2 opartych na procesorze x64
|
Nazwa pliku |
Wersja pliku |
Rozmiar pliku |
Data |
Godzina |
Podest |
|---|---|---|---|---|---|
|
Presentationcore.dll |
3.0.6920.4033 |
3,997,696 |
09-wrz-2010 |
10:52 |
x64 |
|
Presentationfontcache.exe.config |
Nie dotyczy |
161 |
03-kwi-2009 |
20:58 |
Nie dotyczy |
|
Wpfgfx_v0300.dll |
3.0.6920.4003 |
2,254,168 |
17 czerwca 2009 r. |
08:03 |
x64 |
|
Presentationframework.dll |
3.0.6920.4033 |
4,636,672 |
09-wrz-2010 |
10:52 |
x64 |
|
Presentationhostdll.dll |
3.0.6920.4033 |
171,368 |
09-wrz-2010 |
10:52 |
x64 |
|
Windowsbase.dll |
3.0.6920.4033 |
1,110,016 |
09-wrz-2010 |
10:52 |
x64 |
Dla wszystkich obsługiwanych wersji systemu Windows 7 opartej na procesorze x86
|
Nazwa pliku |
Wersja pliku |
Rozmiar pliku |
Data |
Godzina |
Podest |
|---|---|---|---|---|---|
|
Presentationcore.dll |
3.0.6920.5012 |
4,218,880 |
11 września 2010 r. |
01:29 |
x86 |
|
Presentationfontcache.exe.config |
Nie dotyczy |
161 |
10 czerwca 2009 r. |
21:14 |
Nie dotyczy |
|
Wpfgfx_v0300.dll |
3.0.6920.4902 |
1,736,536 |
10 czerwca 2009 r. |
21:14 |
x86 |
|
Presentationframework.dll |
3.0.6920.5012 |
5,279,744 |
11 września 2010 r. |
01:29 |
x86 |
|
Presentationhostdll.dll |
3.0.6920.5012 |
130,408 |
11 września 2010 r. |
01:29 |
x86 |
|
Presentationhost.exe |
4.0.31106.0 |
295,264 |
11 września 2010 r. |
01:29 |
x86 |
|
Presentationhostproxy.dll |
4.0.31106.0 |
99,176 |
11 września 2010 r. |
01:29 |
x86 |
|
Windowsbase.dll |
3.0.6920.5012 |
1,253,376 |
11 września 2010 r. |
01:29 |
x86 |
Dla wszystkich obsługiwanych wersji systemu Windows 7 i Windows Server 2008 R2 opartych na procesorach x64
|
Nazwa pliku |
Wersja pliku |
Rozmiar pliku |
Data |
Godzina |
Podest |
|---|---|---|---|---|---|
|
Presentationcore.dll |
3.0.6920.5012 |
3,997,696 |
11 września 2010 r. |
01:28 |
x64 |
|
Presentationfontcache.exe.config |
Nie dotyczy |
161 |
10 czerwca 2009 r. |
20:30 |
Nie dotyczy |
|
Wpfgfx_v0300.dll |
3.0.6920.4902 |
2,255,176 |
10 czerwca 2009 r. |
20:30 |
x64 |
|
Presentationframework.dll |
3.0.6920.5012 |
4,636,672 |
11 września 2010 r. |
01:28 |
x64 |
|
Presentationhostdll.dll |
3.0.6920.5012 |
171,368 |
11 września 2010 r. |
01:28 |
x64 |
|
Presentationhost.exe |
4.0.31106.0 |
320,352 |
11 września 2010 r. |
01:28 |
x64 |
|
Presentationhostproxy.dll |
4.0.31106.0 |
109,928 |
11 września 2010 r. |
01:28 |
x64 |
|
Windowsbase.dll |
3.0.6920.5012 |
1,114,112 |
11 września 2010 r. |
01:28 |
x64 |
Stan
Firma Microsoft potwierdziła, że jest to problem w produktach firmy Microsoft wymienionych w sekcji "Dotyczy".
Obejście
Aby obejść ten problem, wyłącz potok renderowania sprzętowego, a następnie włącz potok renderowania oprogramowania. Aby wyłączyć potok renderowania sprzętowego i włączyć potok renderowania oprogramowania, użyj jednej z następujących metod:
-
Ustaw wyliczenie System.Windows.Interop.RenderMode.Poniżej przedstawiono przykładowy kod, który ustawia wyliczenie System.Windows.Interop.RenderMode w celu włączenia potoku renderowania oprogramowania po załadowaniu okna 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;}
-
Ustaw klucz rejestru DisableHWAcceleration .Ważne Ta sekcja, metoda lub zadanie zawiera kroki umożliwiające modyfikowanie rejestru. Niepoprawne zmodyfikowanie rejestru może jednak być przyczyną poważnych problemów. Dlatego należy uważnie wykonywać podane czynności. Dla większego bezpieczeństwa przed zmodyfikowaniem rejestru należy wykonać jego kopię zapasową. Dzięki temu będzie można przywrócić rejestr w przypadku wystąpienia problemu. Aby uzyskać więcej informacji dotyczących wykonywania kopii zapasowej i przywracania rejestru, kliknij następujący numer artykułu w celu wyświetlenia tego artykułu z bazy wiedzy Microsoft Knowledge Base:
322756 Jak wykonać kopię zapasową rejestru i przywrócić go w oknie Ostrzeżenie systemu WindowsTa metoda wyłącza potok renderowania sprzętowego dla wszystkich aplikacji WPF na komputerze. Dlatego metoda nie jest zalecane zwykle z wyjątkiem sytuacji, gdy klienci kontrolują środowiska i nie mają nic przeciwko wpływu dla wszystkich aplikacji WPF.
-
Kliknij przycisk Start, kliknij polecenie Uruchom, wpisz regedit, a następnie naciśnij ENTER.
-
Zlokalizuj, a następnie kliknij następujący podklucz rejestru:
HKEY_CURRENT_USER\SOFTWARE\Microsoft\Avalon.Graphics
-
Ustaw wartość wpisu rejestru DisableHWAcceleration na 1.Uwaga Jeśli wpis rejestru DisableHWAcceleration nie istnieje, kliknij prawym przyciskiem myszy podklucz rejestru, wskaż pozycję Nowy, a następnie kliknij pozycję Wartość ciągu , aby utworzyć nowy wpis rejestru. Wpisz DisableHWAcceleration dla nazwy nowego wpisu rejestru, kliknij dwukrotnie DisableHWAcceleration, a następnie zmień wartość DisableHWAcceleration na 1.
-
Zamknij Edytor rejestru.
-
Więcej informacji
Aby uzyskać więcej informacji na temat potoku renderowania oprogramowania, odwiedź następującą witrynę internetową Microsoft Developer Network (MSDN):Ogólne informacje o potokurenderowania oprogramowania Aby uzyskać więcej informacji na temat ustawień rejestru renderowania WPF, odwiedź następującą witrynę internetową MSDN:Ogólne informacje o ustawieniach rejestru renderowania WPFAby uzyskać więcej informacji na temat wyliczenia System.Windows.Interop.RenderMode, odwiedź następującą witrynę internetową MSDN:Ogólne informacje o wyliczaniu "System.Windows.Interop.RenderMode".