Поделиться через


Обработка событий, связанных с процессом, в WebView2

WebView2 использует несколько процессов для поддержки элементов управления WebView2 в приложении. Так как эти процессы могут завершать работу во время использования, WebView2 предоставляет CoreWebView2.ProcessFailed события и CoreWebView2Environment.BrowserProcessExited для реагирования приложения на различные сценарии. Используйте этот документ, чтобы узнать, как использовать эти события для реагирования при возникновении таких сценариев.

Чтобы повысить надежность приложения WebView2, рекомендуется, чтобы приложение обрабатывалось по крайней мере следующими событиями:

Чтобы использовать эту статью, рекомендуется сначала прочитать модель процесса для приложений WebView2. Список API- интерфейсов, связанных с процессом, описанных в этой статье, см. в статье Управление процессами в статье Общие сведения о функциях и API WebView2.

События для процессов, которые завершили работу или завершили сбой

При инициализации элемента управления WebView2 WebView2 обеспечит наличие среды выполнения WebView2 для включения элемента управления и подключения к его группе процессов WebView2. После установки этого подключения элемент управления начнет мониторинг этих процессов и сообщит о следующих событиях, чтобы ваше приложение ранее отреагировало соответствующим образом:

  • Любой сбой процесса. Если какой-либо из процессов в среде выполнения WebView2 завершается сбоем, coreWebView2 вызовет ProcessFailed событие. Это может быть вызвано сбоем процесса или отсутствием ответа на процесс отрисовщика. Используйте это событие для диагностики и восстановления после сбоев в процессах WebView2. См . раздел Обработка сбоев процесса и отрисовка содержимого процесса в элементе управления WebView2 неожиданно завершена ниже.

  • Основной процесс браузера завершается. Если основной процесс браузера завершается по какой-либо причине, CoreWebView2EnvironmentBrowserProcessExited вызывает событие . Используйте это событие для синхронизации операций с ресурсами и временем существования среды выполнения WebView2, таких как управление папками данных пользователя и обновления. См . раздел Обработка основного процесса браузера завершена ниже.

  • Происходит сбой основного процесса браузера. При сбое основного процесса браузера создается событие ProcessFailed и BrowserProcessExited событие, так как основной процесс браузера завершился из-за сбоя.

Сбор сведений о сбоях процесса

Событие ProcessFailed предоставляет подробные сведения о сбое процесса, о который сообщается. Приложение может использовать и собирать данные из активов событий для мониторинга и диагностики, включая описание процесса (только для служебных процессов) и сведения о кадрах (только для процессов отрисовщика).

Некоторые сбои процесса могут вызывать ProcessFailed событие для различных элементов управления WebView2 в приложении. Необходимо решить, как часто собирать сведения и как обрабатывать дубликаты для этих случаев.

Кроме того, большинство сбоев процесса создают дампы в папке данных пользователя в каталоге, возвращенном FailureReportFolderPath. Эти дампы можно использовать для анализа сбоев и предоставления дополнительных сведений при обращении к команде WebView2.

Обработка сбоев процесса

При сбое в среде выполнения WebView2 событие будет возникать для каждого элемента управления WebView2, ProcessFailed связанного с процессом сбоя. Сбой может быть или не может быть восстановлен, а некоторые из них можно восстановить автоматически.

Чтобы определить сбой, можно использовать следующие свойства из аргументов событий:

  • ProcessFailedKind. Сочетание цели процесса (например, браузера, отрисовщика или GPU) и сбоя (выход, отсутствие ответа). Процессы отрисовщика далее делятся на основной отрисовщик кадров (RenderProcessExited, RenderProcessUnresponsive) и отрисовщик подфреймов (FrameRenderProcessExited).

  • ProcessFailedReason. Указывает категорию проблемы, вызвавшую сбой. Некоторые из этих причин сбоя применимы только к определенным типам сбоев.

Процесс основного браузера неожиданно завершился

Все элементы управления WebView2 в приложении, использующие одну и ту же конфигурацию среды, получат событие со следующими параметрами ProcessFailed :

  • Тип сбоя:BrowserProcessExited.
  • Причина сбоя: любая , кроме Unresponsive и LaunchFailed.

Все связанные элементы управления WebView2 будут закрыты, и приложение должно обработать восстановление после этого сбоя. Элементы управления WebView2 необходимо создать заново.

BrowserProcessExited Одно событие будет вызываться из CoreWebview2Environment тоже, но порядок этих событий не гарантируется. Приложение должно координировать свои обработчики событий для этих двух событий при сбое процесса браузера. См . раздел Обработка основного процесса браузера завершена ниже.

Процесс отрисовки содержимого в элементе управления WebView2 неожиданно завершился

Содержимое в затронутых кадрах (главном или подкадре) заменяется страницей ошибки. Каждый элемент управления WebView2, на который влияет содержимое, будет получать событие со следующими параметрами ProcessFailed :

  • Тип сбоя:RenderProcessExited или FrameRenderProcessExited.
  • Причина сбоя: любая , кроме Unresponsive и ProfileDeleted.

Приложение должно обрабатывать восстановление после этого сбоя. Если на основной кадр влияет (RenderProcessExited), можно использовать API для перезагрузки Reload содержимого в элементах управления. Кроме того, можно воссоздать Close элементы управления WebView2.

Если основной кадр не затронут (FrameRenderProcessExited), приложение может взаимодействовать с основным кадром для восстановления содержимого в затронутых кадрах. Событие ProcessFailed предоставляет сведения о затронутых кадрах через FrameInfosForFailedProcess свойство .

Процесс GPU неожиданно завершился

Содержимое в элементах управления WebView2 может мигать при автоматическом повторном создании процесса. Каждый элемент управления WebView2 в группе процессов WebView2 будет получать событие со следующими параметрами ProcessFailed :

  • Тип сбоя:GpuProcessExited.
  • Причина сбоя: любая , кроме Unresponsive и ProfileDeleted.

Это наиболее распространенный сбой процесса WebView2, который можно восстановить автоматически. Приложению не требуется обрабатывать восстановление для этого события, но он может собирать сведения, чтобы понять, какие постоянные проблемы или есть основная причина для повторяющегося завершения процесса GPU.

Служебная программа неожиданно завершилась

Могут возникнуть некоторые прерывания (например, если в служебном процессе была размещена аудиослужба), необходимые процессы автоматически создаются заново. Каждый элемент управления WebView2 в группе процессов WebView2 будет получать событие со следующими параметрами ProcessFailed :

  • Тип сбоя:UtilityProcessExited.
  • Причина сбоя: любая , кроме Unresponsive и ProfileDeleted.

Этот сбой процесса не является неустранимым и может быть автоматически восстановлен. Приложению не требуется обрабатывать восстановление для этого события, но он может собирать сведения для понимания любых постоянных проблем, включая ProcessDescription указанные в аргументах событий.

Любой другой процесс неожиданно завершился

Большинство процессов в группе процессов WebView2 связаны со всеми элементами управления WebView2 с его помощью и будут вызываться ProcessFailed к каждому элементу управления с помощью:

  • Тип сбоя:PpapiBrokerProcessExited , PpapiPluginProcessExited, RenderProcessUnresponsiveSandboxHelperProcessExited, или UnknownProcessExited.
  • Причина сбоя: любая , кроме Unresponsive и ProfileDeleted.

Эти сбои процесса не являются неустранимыми, и приложению не требуется обрабатывать восстановление для каких-либо из них, но он может собирать сведения, чтобы понять любые постоянные проблемы.

Обработка отрисовщиков без ответа

Когда процесс отрисовщика для основного кадра в элементе управления WebView2 перестает отвечать на входные данные пользователя, ProcessFailed событие будет вызываться следующим образом:

  • Тип сбоя:RenderProcessUnresponsive.
  • Причина сбоя:Unresponsive.

Событие будет по-прежнему вызываться до тех пор, пока процесс не отвечает. Процесс отрисовки может не отвечать на запросы по следующим причинам:

  • Выполняется долго выполняющийся скрипт . Например, веб-содержимое в элементе управления WebView2 может выполнять синхронный XHR или ввести бесконечный цикл. Перезагрузка элемента управления WebView2 (путем вызова Reload) может привести к повторной реакции элемента управления.

  • Система занята.

Это событие будет возникать неоднократно (например, каждые 15 секунд), поэтому необходимо определить пороговое значение для приложения.

Обработка процесса главного браузера завершена

Событие BrowserProcessExited указывает, что основной процесс браузера завершился и его ресурсы (включая его дочерние процессы) были освобождены. Это может произойти по следующим причинам:

  • Все элементы управления WebView2 из CoreWebView2Environment были закрыты. Примеры сценариев приложений:

    • Очистка папки данных пользователя.
    • Обновление среды выполнения WebView2.
    • Перезапуск с другой конфигурацией среды.
    • Очистка кэша проверки подлинности.
  • Сбой основного процесса браузера. См. раздел Процесс основного браузера неожиданно завершился выше.

Это событие предназначено для операций с ресурсами среды выполнения WebView2. Приложение может использовать тип выхода и идентификатор процесса из активов событий, чтобы определить, когда и как обрабатывать событие. Например, может потребоваться согласовать с ProcessFailed обработчиками событий, чтобы предотвратить возникновение условий гонки, которые могут возникнуть при попытке восстановления, а также при попытке удалить папку данных пользователя.

Очистка папки данных пользователя

Приложению необходимо подождать, пока среда выполнения WebView2 не отпустит папку пользовательских данных , прежде чем она сможет удалить ее содержимое. После закрытия всех элементов управления WebView2 событие указывает, BrowserProcessExited что это произошло, и приложение может продолжить операцию.

См. также:

Обновление среды выполнения WebView2

Чтобы использовать последнюю версию среды выполнения WebView2 после обновления, приложению необходимо закрыть все элементы управления WebView2 и создать новый CoreWebView2Environment. Чтобы убедиться, что используется новая версия, приложение должно дождаться BrowserProcessExited события. В противном случае основной процесс браузера может остаться активным при создании новой среды и переход на новую версию завершится ошибкой.

Перезапуск с другой конфигурацией среды

Большая часть конфигурации, используемой для , привязана CoreWebView2Environment к времени существования основного процесса браузера. Чтобы внести изменения в эту конфигурацию (например, в язык), приложению необходимо закрыть существующие элементы управления WebView2 и дождаться BrowserProcessExited повторного создания элементов управления. В противном случае инициализация элементов управления WebView2 из нового CoreWebView2Environment может завершиться сбоем с несовместимой конфигурацией.

Очистка кэша проверки подлинности

В кэше проверки подлинности хранятся выбранные сертификаты и учетные данные из запросов сертификатов клиента HTTPS.

Кэш проверки подлинности привязан к основному времени существования процесса браузера. Поэтому для очистки кэша проверки подлинности приложение должно повторно создать свои элементы управления WebView2 из нового экземпляра процесса основного браузера.

Чтобы обеспечить использование нового экземпляра основного процесса браузера при повторном создании элементов управления WebView2, приложение должно дождаться BrowserProcessExited события перед продолжением. В противном случае основной процесс браузера может остаться активным при повторном создании элементов управления, что позволит сохранить кэш проверки подлинности, а не очистить его, как предполагалось.

См. также