Behandeln prozessbezogener Ereignisse in WebView2

WebView2 verwendet mehrere Prozesse, um die WebView2-Steuerelemente in Ihrer Anwendung zu unterstützen. Da diese Prozesse während der Verwendung beendet werden können, stellt WebView2 die CoreWebView2.ProcessFailed Ereignisse und CoreWebView2Environment.BrowserProcessExited bereit, damit Ihre Anwendung auf verschiedene Szenarien reagieren kann. In diesem Dokument erfahren Sie, wie Sie diese Ereignisse verwenden, um auf diese Szenarien zu reagieren.

Um die Zuverlässigkeit Ihrer WebView2-Anwendung zu verbessern, wird empfohlen, dass Ihre App mindestens die folgenden Ereignisse verarbeitet:

Um diesen Artikel zu verwenden, wird empfohlen, zunächst Prozessmodell für WebView2-Apps zu lesen. Eine Liste der prozessbezogenen APIs, die in diesem Artikel behandelt werden, finden Sie unter Prozessverwaltung in Übersicht über WebView2-Features und -APIs.

Ereignisse für Prozesse, die beendet oder fehlgeschlagen sind

Wenn Sie ein WebView2-Steuerelement initialisieren, stellt WebView2 sicher, dass eine WebView2-Runtime vorhanden ist, um Ihr Steuerelement mit Energie zu verbinden und eine Verbindung mit der WebView2-Prozessgruppe herzustellen. Sobald diese Verbindung hergestellt wurde, beginnt Ihr Steuerelement mit der Überwachung dieser Prozesse und meldet die folgenden Ereignisse, damit Ihre Anwendung entsprechend reagieren kann:

Erfassen von Prozessfehlerdetails

Das ProcessFailed Ereignis enthält ausführliche Informationen zum gemeldeten Prozessfehler. Ihre Anwendung kann Informationen aus den Ereignisargumenten für Überwachungs- und Diagnosezwecke verwenden und sammeln, einschließlich der Prozessbeschreibung (nur für Hilfsprozesse) und Framesinformationen (nur für Rendererprozesse).

Einige Prozessfehler können das ProcessFailed Ereignis für verschiedene WebView2-Steuerelemente in Ihrer Anwendung auslösen. Sie müssen entscheiden, wie oft Details erfasst und wie Duplikate für diese Fälle behandelt werden sollen.

Darüber hinaus generieren die meisten Prozessabstürze Speicherabbilder im Benutzerdatenordner unter dem von FailureReportFolderPathzurückgegebenen Verzeichnis. Sie können diese Speicherabbilder verwenden, um Abstürze zu verstehen und zusätzliche Informationen bereitzustellen, wenn Sie sich an das WebView2-Team wenden.

Behandeln von Prozessabstürzen

Wenn in der WebView2-Runtime ein Absturz auftritt, wird das ProcessFailed -Ereignis für jedes WebView2-Steuerelement ausgelöst, das dem abstürzenden Prozess zugeordnet ist. Der Fehler kann oder nicht wiederhergestellt werden, und einige Fehler sind automatisch behebbar.

Sie können die folgenden Eigenschaften aus den Ereignisargumenten verwenden, um den Fehler zu identifizieren:

  • ProcessFailedKind. Eine Kombination aus Prozesszweck (z. B. Browser, Renderer oder GPU) und Fehler (Beenden, Nicht reagieren). Rendererprozesse sind weiter in Hauptframerenderer (RenderProcessExited, RenderProcessUnresponsive) und Teilframerenderer (FrameRenderProcessExited) unterteilt.

  • ProcessFailedReason. Gibt die Kategorie des Problems an, das den Fehler verursacht. Einige dieser Fehlerursachen gelten nur für bestimmte Fehlertypen.

Der Hauptbrowserprozess wurde unerwartet beendet.

Alle WebView2-Steuerelemente in Ihrer Anwendung, die dieselbe Umgebungskonfiguration verwenden, empfangen das ProcessFailed Ereignis mit:

  • Fehlerart:BrowserProcessExited
  • Fehlerursache: beliebig, mit Ausnahme Unresponsive von und LaunchFailed.

Alle zugeordneten WebView2-Steuerelemente werden geschlossen, und Ihre Anwendung muss die Wiederherstellung nach diesem Fehler durchführen. Die WebView2-Steuerelemente müssen neu erstellt werden.

Es wird auch ein einzelnes BrowserProcessExited Ereignis von CoreWebview2Environment ausgelöst, aber die Reihenfolge dieser Ereignisse ist nicht garantiert. Ihre Anwendung muss ihre Ereignishandler für diese beiden Ereignisse koordinieren, wenn der Browserprozess abstürzt. Weitere Informationen finden Sie weiter unten unter Behandeln des Hauptbrowserprozesses, der beendet wurde.

Ein Prozess, der Inhalte im WebView2-Steuerelement rendert, wurde unerwartet beendet.

Der Inhalt in betroffenen Frames (Haupt- oder Unterrahmen) wird durch eine Fehlerseite ersetzt. Jedes WebView2-Steuerelement, in dem Inhalte betroffen sind, empfängt das ProcessFailed Ereignis mit:

  • Fehlerart:RenderProcessExited oder FrameRenderProcessExited.
  • Fehlerursache: beliebig, mit Ausnahme Unresponsive von und ProfileDeleted.

Ihre Anwendung muss die Wiederherstellung nach diesem Fehler verarbeiten. Wenn der Hauptrahmen betroffen ist (RenderProcessExited), können Sie die Reload API verwenden, um Inhalte in Ihren Steuerelementen neu zu laden. Alternativ können Close Sie die WebView2-Steuerelemente neu erstellen.

Wenn der Hauptframe nicht betroffen ist (FrameRenderProcessExited), kann Ihre Anwendung mit dem Hauptframe kommunizieren, um Inhalte in den betroffenen Frames wiederherzustellen. Das ProcessFailed -Ereignis stellt Details zu den betroffenen Frames über die -Eigenschaft bereit FrameInfosForFailedProcess .

Der GPU-Prozess wurde unerwartet beendet.

Der Inhalt in Ihren WebView2-Steuerelementen kann blinken, wenn der Prozess automatisch neu erstellt wird. Jedes WebView2-Steuerelement in der WebView2-Prozessgruppe empfängt das ProcessFailed Ereignis mit:

  • Fehlerart:GpuProcessExited
  • Fehlerursache: beliebig, mit Ausnahme Unresponsive von und ProfileDeleted.

Dies ist der häufigste WebView2-Prozessfehler und kann automatisch wiederhergestellt werden. Ihre Anwendung muss die Wiederherstellung für dieses Ereignis nicht verarbeiten, kann aber Informationen sammeln, um dauerhafte Probleme zu verstehen oder wenn eine zugrunde liegende Ursache für wiederholte GPU-Prozesse besteht.

Ein Hilfsprogrammprozess wurde unerwartet beendet

Es kann zu Unterbrechungen kommen (z. B. wenn der Hilfsprogrammprozess den Audiodienst hostet), erforderliche Prozesse werden automatisch neu erstellt. Jedes WebView2-Steuerelement in der WebView2-Prozessgruppe empfängt das ProcessFailed Ereignis mit:

  • Fehlerart:UtilityProcessExited
  • Fehlerursache: beliebig, mit Ausnahme Unresponsive von und ProfileDeleted.

Dieser Prozessfehler ist nicht schwerwiegend und kann automatisch wiederhergestellt werden. Ihre Anwendung muss die Wiederherstellung für dieses Ereignis nicht verarbeiten, kann jedoch Informationen sammeln, um alle persistenten Probleme zu verstehen, einschließlich der ProcessDescription in den Ereignisargumenten angegebenen.

Jeder andere Prozess wurde unerwartet beendet.

Die meisten Prozesse in der WebView2-Prozessgruppe sind allen WebView2-Steuerelementen zugeordnet, die sie verwenden, und werden zu jedem Steuerelement wie folgt ausgelöst ProcessFailed :

  • Fehlerart:PpapiBrokerProcessExited , PpapiPluginProcessExited, RenderProcessUnresponsive, SandboxHelperProcessExitedoder UnknownProcessExited.
  • Fehlerursache: beliebig, mit Ausnahme Unresponsive von und ProfileDeleted.

Diese Prozessfehler sind nicht schwerwiegend, und Ihre Anwendung muss keine Wiederherstellung für einen von ihnen durchführen, kann jedoch Informationen sammeln, um persistente Probleme zu verstehen.

Behandeln von nicht reagierenden Renderern

Wenn der Rendererprozess für den Hauptframe in einem WebView2-Steuerelement nicht mehr auf Benutzereingaben reagiert, wird das ProcessFailed Ereignis ausgelöst mit:

  • Fehlerart:RenderProcessUnresponsive
  • Fehlerursache:Unresponsive

Das Ereignis wird weiterhin ausgelöst, solange der Prozess nicht reagiert. Das Nicht reagieren des Rendererprozesses kann aus den folgenden Gründen auftreten:

  • Es wird ein Skript mit langer Ausführungszeit ausgeführt. Beispielsweise kann der Webinhalt in Ihrem WebView2-Steuerelement eine synchrone XHR ausführen oder eine Endlosschleife durchlaufen haben. Durch erneutes Laden des WebView2-Steuerelements (durch Aufrufen Reloadvon ) reagiert das Steuerelement möglicherweise wieder.

  • Das System ist ausgelastet.

Dieses Ereignis wird wiederholt ausgelöst (z. B. alle 15 Sekunden), sodass Sie den Schwellenwert für Ihre Anwendung festlegen müssen, um darauf reagieren zu können.

Verarbeiten des Hauptbrowserprozesses, der beendet wurde

Das BrowserProcessExited -Ereignis gibt an, dass der Hauptbrowserprozess beendet und seine Ressourcen (einschließlich der untergeordneten Prozesse) freigegeben wurden. Dies kann aus folgenden Gründen geschehen:

  • Alle WebView2-Steuerelemente von CoreWebView2Environment wurden geschlossen. Beispiele für App-Szenarien sind:

    • Löschen des Benutzerdatenordners.
    • Die WebView2-Runtime wird aktualisiert.
    • Neustarten mit einer anderen Umgebungskonfiguration.
    • Löschen des Authentifizierungscaches.
  • Fehler beim Hauptbrowserprozess. Weitere Informationen finden Sie oben unter Der Hauptbrowserprozess wurde unerwartet beendet.

Dieses Ereignis ist für Vorgänge vorgesehen, die die WebView2-Runtimeressourcen betreffen. Ihre Anwendung kann die Exitart und die Prozess-ID aus den Ereignisargumenten verwenden, um zu bestimmen, wann und wie das Ereignis behandelt werden soll. Beispielsweise können Sie sich mit Ihren ProcessFailed Ereignishandlern abstimmen, um Racebedingungen zu verhindern, die beim Versuch der Wiederherstellung auftreten können, während gleichzeitig versucht wird, den Benutzerdatenordner zu entfernen.

Löschen des Benutzerdatenordners

Ihre Anwendung muss warten, bis die WebView2-Runtime den Benutzerdatenordner freigegeben hat, bevor sie den Inhalt löschen kann. Nach dem Schließen aller WebView2-Steuerelemente gibt das BrowserProcessExited -Ereignis an, dass dies geschehen ist, und Ihre Anwendung kann mit dem Vorgang fortfahren.

Siehe auch:

Aktualisieren der WebView2-Runtime

Um die neueste WebView2-Runtime nach einem Update verwenden zu können, muss Ihre Anwendung alle WebView2-Steuerelemente schließen und ein neues CoreWebView2Environmenterstellen. Um sicherzustellen, dass die neue Version verwendet wird, muss Ihre Anwendung auf das BrowserProcessExited Ereignis warten. Andernfalls bleibt der Hauptbrowserprozess möglicherweise aktiv, wenn die neue Umgebung erstellt wird und der Wechsel zur neuen Version fehlschlägt.

Neustarten mit einer anderen Umgebungskonfiguration

Der Großteil der konfiguration, die für ein CoreWebView2Environment verwendet wird, ist an die Lebensdauer des Hauptbrowserprozesses gebunden. Um Änderungen an dieser Konfiguration vorzunehmen (z. B. an der Sprache), muss Ihre Anwendung vorhandene WebView2-Steuerelemente schließen und auf BrowserProcessExited warten, bevor die Steuerelemente neu erstellt werden. Andernfalls kann beim Initialisieren der WebView2-Steuerelemente aus der neuen CoreWebView2Environment ein Fehler mit inkompatibler Konfiguration auftreten.

Löschen des Authentifizierungscaches

Der Authentifizierungscache speichert die Zertifikatauswahl und Anmeldeinformationen aus HTTPS-Clientzertifikatanforderungen.

Der Authentifizierungscache ist an die Hauptprozesslebensdauer des Browsers gebunden. Um den Authentifizierungscache zu löschen, muss Ihre Anwendung ihre WebView2-Steuerelemente aus einer neuen Hauptprozessinstanz des Browsers neu erstellen.

Um sicherzustellen, dass beim erneuten Erstellen der WebView2-Steuerelemente eine neue Hauptprozessinstanz des Browsers verwendet wird, muss Ihre Anwendung auf das BrowserProcessExited Ereignis warten, bevor sie fortgefahren wird. Andernfalls bleibt der Hauptbrowserprozess möglicherweise aktiv, wenn die Steuerelemente neu erstellt werden, wodurch der Authentifizierungscache beibehalten wird, anstatt ihn wie beabsichtigt zu löschen.

Siehe auch