Compartilhar via


Processar eventos relacionados com processos no WebView2

O WebView2 utiliza vários processos para suportar os controlos WebView2 na sua aplicação. Uma vez que estes processos podem sair durante a utilização, o WebView2 fornece os CoreWebView2.ProcessFailed eventos e CoreWebView2Environment.BrowserProcessExited para que a sua aplicação reaja a diferentes cenários. Utilize este documento para saber como utilizar estes eventos para reagir quando estes cenários ocorrem.

Para melhorar a fiabilidade da sua aplicação WebView2, recomenda-se que a sua aplicação processe, pelo menos, os seguintes eventos:

Para utilizar este artigo, recomendamos que leia primeiro o Modelo de processo para aplicações WebView2. Para obter uma lista das APIs relacionadas com processos abrangidas por este artigo, veja Gestão de processos em Descrição geral das funcionalidades e APIs webView2.

Eventos para processos que saíram ou falharam

Quando inicializa um controlo WebView2, o WebView2 garante que existe um Runtime webView2 para ligar ao controlo e ligar ao respetivo Grupo de Processos webView2. Assim que esta ligação for estabelecida, o controlo começará a monitorizar estes processos e a comunicar os seguintes eventos para que a aplicação possa reagir em conformidade:

  • Qualquer falha de processo. Quando qualquer um dos processos no Runtime do WebView2 falhar, o CoreWebView2 irá gerar o ProcessFailed evento. Tal pode dever-se a uma falha do processo ou a um processo de composição sem resposta. Utilize este evento para diagnósticos e recuperação de falhas nos processos webView2. Veja Processar falhas de processos e Um conteúdo de composição de processos no controlo WebView2 saiu inesperadamente, abaixo.

  • O processo do browser principal é fechado. Se o processo do browser principal sair por qualquer motivo, o CoreWebView2Environment irá gerar o BrowserProcessExited evento. Utilize este evento para sincronizar operações que envolvam os recursos e a duração do Runtime do WebView2, como a gestão e atualizações de Pastas de Dados do Utilizador . Veja Processar o processo do browser principal fechado, abaixo.

  • O processo principal do browser falha. Quando o processo do browser principal falha, produz um evento e um BrowserProcessExited evento, uma ProcessFailed vez que o processo do browser principal foi encerrado devido a uma falha.

Recolher detalhes da falha do processo

O ProcessFailed evento fornece informações detalhadas sobre a falha do processo que está a ser comunicada. A sua aplicação pode utilizar e recolher informações dos args de eventos para fins de monitorização e diagnóstico, incluindo a descrição do processo (apenas para processos de utilidade) e informações de frames (apenas para processos de composição).

Algumas falhas de processo podem gerar o ProcessFailed evento em diferentes controlos WebView2 na sua aplicação. Tem de decidir com que frequência deve recolher detalhes e como lidar com duplicados para estes casos.

Além disso, a maioria das falhas de processo gerará informações de falha de sistema na pasta de dados do utilizador, no diretório devolvido por FailureReportFolderPath. Pode utilizar estas informações de falha de sistema para compreender as falhas e fornecer informações adicionais ao contactar a equipa do WebView2.

Processar falhas do processo

Quando ocorre uma falha no Runtime do WebView2, o ProcessFailed evento será gerado para todos os controlos WebView2 associados ao processo de falha. A falha pode ou não ser recuperável e algumas falhas são recuperáveis automaticamente.

Pode utilizar as seguintes propriedades dos args do evento para identificar a falha:

  • ProcessFailedKind. Uma combinação da finalidade do processo (como browser, compositor ou GPU) e falha (saída, falta de resposta). Os processos do compositor estão ainda divididos no compositor de frames principal (RenderProcessExited, RenderProcessUnresponsive) e no compositor de subframe (FrameRenderProcessExited).

  • ProcessFailedReason. Indica a categoria do problema que está a causar a falha. Alguns destes motivos de falha aplicam-se apenas a tipos de falhas específicos.

O processo principal do browser foi encerrado inesperadamente

Todos os controlos WebView2 na sua aplicação com a mesma configuração de ambiente receberão o ProcessFailed evento com:

  • Tipo de falha:BrowserProcessExited.
  • Motivo da falha: qualquer, exceto Unresponsive e LaunchFailed.

Todos os controlos WebView2 associados serão fechados e a sua aplicação tem de processar a recuperação desta falha. Os controlos WebView2 têm de ser recriados.

Também será gerado um único BrowserProcessExited evento, CoreWebview2Environment mas a ordem destes eventos não é garantida. A sua aplicação tem de coordenar os respetivos processadores de eventos para estes dois eventos quando o processo do browser falhar. Veja Processar o processo do browser principal fechado, abaixo.

Um processo de composição de conteúdo no controlo WebView2 saiu inesperadamente

O conteúdo em frames afetados (principal ou subframe) é substituído por uma página de erro. Todos os controlos WebView2 em que o conteúdo é afetado receberão o ProcessFailed evento com:

  • Tipo de falha:RenderProcessExited ou FrameRenderProcessExited.
  • Motivo da falha: qualquer, exceto Unresponsive e ProfileDeleted.

A sua aplicação tem de processar a recuperação desta falha. Se a moldura principal for afetada (RenderProcessExited), pode utilizar a Reload API para recarregar o conteúdo nos seus controlos. Em alternativa, pode Close e recriar os controlos WebView2.

Se o fotograma principal não for afetado (FrameRenderProcessExited), a aplicação pode comunicar com a moldura principal para recuperar conteúdo nos frames afetados. O ProcessFailed evento fornece detalhes para os fotogramas afetados através da FrameInfosForFailedProcess propriedade .

O processo de GPU foi encerrado inesperadamente

Os conteúdos nos seus controlos WebView2 podem piscar à medida que o processo é recriado automaticamente. Todos os controlos WebView2 no Grupo de Processos webView2 receberão o ProcessFailed evento com:

  • Tipo de falha:GpuProcessExited.
  • Motivo da falha: qualquer, exceto Unresponsive e ProfileDeleted.

Esta é a falha de processo webView2 mais comum e é recuperável automaticamente. A sua aplicação não precisa de processar a recuperação para este evento, mas pode recolher informações para compreender quaisquer problemas persistentes ou se existir uma causa subjacente para saídas repetidas do processo de GPU.

Um processo de utilitário foi encerrado inesperadamente

Podem existir algumas interrupções (por exemplo, se o processo de utilitário estava a alojar o serviço de áudio) os processos necessários são recriados automaticamente. Todos os controlos WebView2 no Grupo de Processos webView2 receberão o ProcessFailed evento com:

  • Tipo de falha:UtilityProcessExited.
  • Motivo da falha: qualquer, exceto Unresponsive e ProfileDeleted.

Esta falha de processo não é fatal e é recuperável automaticamente. A sua aplicação não precisa de processar a recuperação para este evento, mas pode recolher informações para compreender quaisquer problemas persistentes, incluindo os ProcessDescription fornecidos nos eventos.

Qualquer outro processo foi encerrado inesperadamente

A maioria dos processos no Grupo de Processos webView2 estão associados a todos os controlos WebView2 que o utilizam e serão elevados ProcessFailed a cada controlo com:

  • Tipo de falha:PpapiBrokerProcessExited, PpapiPluginProcessExited, RenderProcessUnresponsive, SandboxHelperProcessExitedou UnknownProcessExited.
  • Motivo da falha: qualquer, exceto Unresponsive e ProfileDeleted.

Estas falhas de processo não são fatais e a sua aplicação não precisa de processar a recuperação de nenhuma delas, mas pode recolher informações para compreender quaisquer problemas persistentes.

Processar compositores sem resposta

Quando o processo de composição do frame principal num controlo WebView2 deixar de responder à entrada do utilizador, o ProcessFailed evento será gerado com:

  • Tipo de falha:RenderProcessUnresponsive.
  • Motivo da falha:Unresponsive.

O evento continuará a ser gerado enquanto o processo permanecer sem resposta. A falta de resposta do processo do compositor pode ocorrer pelos seguintes motivos:

  • Está a ser executado um script de execução prolongada . Por exemplo, o conteúdo Web no seu controlo WebView2 pode estar a executar um XHR síncrono ou ter introduzido um ciclo infinito. Recarregar o controlo WebView2 (ao chamar Reload) pode tornar o controlo reativo novamente.

  • O sistema está ocupado.

Este evento será gerado repetidamente (por exemplo, a cada 15 segundos), pelo que tem de decidir o limiar para a sua aplicação agir.

Processar o processo do browser principal foi fechado

O BrowserProcessExited evento indica que o processo principal do browser foi encerrado e que os respetivos recursos (incluindo os processos subordinados) foram lançados. Isto pode acontecer pelos seguintes motivos:

  • Todos os controlos WebView2 do CoreWebView2Environment foram fechados. Os cenários de aplicação de exemplo incluem:

    • Limpar a pasta de dados do utilizador.
    • A atualizar o WebView2 Runtime.
    • Reiniciar com uma configuração de ambiente diferente.
    • Limpar a cache de autenticação.
  • O processo do browser principal falhou. Veja O processo do browser principal saiu inesperadamente, acima.

Este evento destina-se a operações que envolvam os recursos do Runtime webView2. A sua aplicação pode utilizar o tipo de saída e o ID do processo dos args do evento para determinar quando e como lidar com o evento. Por exemplo, poderá querer coordenar-se com os processadores ProcessFailed de eventos para impedir condições race que possam surgir da tentativa de recuperação enquanto tenta remover a pasta de dados do utilizador.

Limpar a pasta de dados do utilizador

A sua aplicação tem de aguardar até que o Runtime do WebView2 tenha lançado a Pasta de Dados do Utilizador antes de poder eliminar os respetivos conteúdos. Depois de fechar todos os controlos WebView2, o BrowserProcessExited evento indica que isto aconteceu e a sua aplicação pode prosseguir com a operação.

Veja também:

Atualizar o Runtime webView2

Para utilizar o Runtime WebView2 mais recente após uma atualização, a sua aplicação tem de fechar todos os controlos WebView2 e criar um novo CoreWebView2Environment. Para garantir que a nova versão é utilizada, a aplicação tem de aguardar pelo BrowserProcessExited evento. Caso contrário, o processo principal do browser poderá permanecer ativo quando o novo ambiente for criado e a mudança para a nova versão falhará.

Reiniciar com uma configuração de ambiente diferente

A maior parte da configuração utilizada para um CoreWebView2Environment está vinculada à duração do processo do browser principal. Para fazer alterações a esta configuração (por exemplo, ao idioma), a sua aplicação tem de fechar os controlos WebView2 existentes e aguardar antes BrowserProcessExited de recriar os controlos; caso contrário, inicializar os controlos WebView2 a partir do novo CoreWebView2Environment poderá falhar com uma configuração incompatível.

Limpar a cache de autenticação

A cache de autenticação armazena a seleção de certificados e as credenciais dos Pedidos de Certificado de Cliente HTTPS.

A cache de autenticação está vinculada à duração do processo do browser principal. Por conseguinte, para limpar a cache de autenticação, a aplicação tem de recriar os respetivos controlos WebView2 a partir de uma nova instância do processo do browser principal.

Para garantir que é utilizada uma nova instância do processo do browser principal ao recriar os controlos WebView2, a aplicação tem de aguardar pelo BrowserProcessExited evento antes de continuar; caso contrário, o processo principal do browser poderá permanecer ativo quando os controlos forem recriados, o que preservaria a cache de autenticação em vez de o limpar conforme pretendido.

Confira também