Este artigo foi traduzido por máquina. Para visualizar o arquivo em inglês, marque a caixa de seleção Inglês. Você também pode exibir o texto Em inglês em uma janela pop-up, movendo o ponteiro do mouse sobre o texto.
Tradução
Inglês

Erros de inicialização do .NET Framework: gerenciando a experiência do usuário

.NET Framework (current version)
 

O sistema de ativação do common language runtime (CLR) determina a versão do CLR que será usada para executar o código do aplicativo gerenciado. Em alguns casos, o sistema de ativação não poderá encontrar uma versão do CLR para carregar. Essa situação normalmente ocorre quando um aplicativo requer uma versão do CLR é inválido ou não está instalado em um determinado computador. Se a versão solicitada não for encontrada, o sistema de ativação do CLR retorna um código de erro HRESULT da função ou interface que foi chamado e exibe uma mensagem de erro para o usuário que está executando o aplicativo. Este artigo fornece uma lista de códigos HRESULT e explica como você pode impedir que a mensagem de erro seja exibida.

O CLR fornece infraestrutura de log para ajudar a depurar problemas de ativação do CLR, conforme descrito em Como depurar problemas de ativação do CLR. Essa infra-estrutura não deve ser confundida com logs de associação de assembly, que são totalmente diferente.

A ativação do CLR APIs retornar códigos HRESULT para relatar o resultado de uma operação de ativação para um host. Hosts CLR devem sempre consultar esses valores de retorno antes de prosseguir com outras operações.

  • CLR_E_SHIM_RUNTIMELOAD

  • CLR_E_SHIM_RUNTIMEEXPORT

  • CLR_E_SHIM_INSTALLROOT

  • CLR_E_SHIM_INSTALLCOMP

  • CLR_E_SHIM_LEGACYRUNTIMEALREADYBOUND

  • CLR_E_SHIM_SHUTDOWNINPROGRESS

Se o sistema de ativação do CLR não é possível carregar a versão correta do tempo de execução que é exigida por um aplicativo, ele exibe uma mensagem de erro aos usuários para informá-lo de que o computador não está configurado corretamente para executar o aplicativo e fornece a eles a oportunidade de corrigir a situação. Normalmente, a seguinte mensagem de erro é apresentada nesta situação. O usuário pode escolher Sim para ir para um site da Microsoft onde eles podem baixar a versão correta do .NET Framework para o aplicativo.

Caixa de diálogo de erro de inicialização do.NET Framework

Mensagem de erro típica para erros de inicialização

Como desenvolvedor, você tem uma variedade de opções para controlar a mensagem de erro de inicialização do .NET Framework. Por exemplo, você pode usar um sinalizador de API para impedir que a mensagem seja exibida, conforme discutido na próxima seção. No entanto, você ainda precisa resolver o problema que impediu o seu aplicativo carregue o tempo de execução solicitado. Caso contrário, seu aplicativo pode não ser executado em todos os ou algumas funcionalidades podem não estar disponíveis.

Para resolver os problemas subjacentes e fornecer a melhor experiência de usuário (menos mensagens de erro), recomendamos o seguinte:

Exibir uma mensagem de erro para comunicar-se de que uma versão do .NET Framework solicitada não foi encontrada pode ser exibido como um serviço útil ou pequenas perturbações aos usuários. Em ambos os casos, você pode controlar essa interface do Usuário passando sinalizadores para a ativação de APIs.

O Iclrmetahostpolicy método aceita um METAHOST_POLICY_FLAGS membro de enumeração como entrada. Você pode incluir o sinalizador METAHOST_POLICY_SHOW_ERROR_DIALOG para solicitar uma mensagem de erro se a versão do CLR solicitada não foi encontrada. Por padrão, a mensagem de erro não é exibida. (O Iclrmetahost método não aceita esse sinalizador e não fornece qualquer outra forma de exibir a mensagem de erro.)

O Windows fornece uma SetErrorMode função que você pode usar para declarar se você deseja que as mensagens de erro a ser mostrado como resultado do código que é executado em seu processo. Você pode especificar o sinalizador SEM_FAILCRITICALERRORS para impedir que a mensagem de erro seja exibida.

No entanto, em alguns cenários, é importante substituir a configuração de SEM_FAILCRITICALERRORS definida por um processo do aplicativo. Por exemplo, se você tiver um componente nativo que hospeda o CLR e que está hospedado em um processo em que SEM_FAILCRITICALERRORS é definida, talvez queira substituir o sinalizador, dependendo do impacto de exibir mensagens de erro do processo específico do aplicativo. Nesse caso, você pode usar um dos sinalizadores a seguir para substituir SEM_FAILCRITICALERRORS:

O CLR inclui um conjunto de hosts para uma variedade de cenários, e esses hosts todos exibem uma mensagem de erro ao encontrar problemas ao carregar a versão necessária do tempo de execução. A tabela a seguir fornece uma lista de hosts e suas políticas de mensagem de erro.

Host do CLR

Descrição

Política de mensagem de erro

Mensagem de erro pode ser desabilitada?

Host EXE gerenciado

Inicia gerenciado EXEs.

É mostrado no caso de uma versão do .NET Framework ausente

Não

Host de COM gerenciado

Cargas gerenciado componentes COM em um processo.

É mostrado no caso de uma versão do .NET Framework ausente

Sim, definindo o SEM_FAILCRITICALERRORS sinalizador

Host do ClickOnce

Inicia os aplicativos ClickOnce.

É mostrado no caso de uma versão do .NET Framework ausente, começando com o .NET Framework 4.5

Não

Host XBAP

Inicia os aplicativos XBAP de WPF.

É mostrado no caso de uma versão do .NET Framework ausente, começando com o .NET Framework 4.5

Não

O sistema de ativação do CLR fornece o mesmo comportamento e interface do Usuário em Windows 8 como em outras versões do sistema operacional Windows, exceto quando encontrar problemas ao carregar o CLR 2.0.Windows 8 inclui o .NET Framework 4.5, que usa CLR 4.5. No entanto, Windows 8 não inclui o .NET Framework 2.0, 3.0 ou 3.5, que usam o CLR 2.0. Como resultado, os aplicativos que dependem de CLR 2.0 não são executados Windows 8 por padrão. Em vez disso, eles exibem a seguinte caixa de diálogo para permitir que os usuários instalem o .NET Framework 3.5. Os usuários também podem habilitar o .NET Framework 3.5 no painel de controle. Ambas as opções são discutidas no artigo Instalando o .NET Framework 3.5 no Windows 8, Windows 8.1 e Windows 10.

Caixa de diálogo de 3.5 instalar no Windows 8

Solicitar a instalação do .NET Framework 3.5 sob demanda

System_CAPS_noteObservação

O .NET Framework 4.5 substitui o .NET Framework 4 (4 do CLR) no computador do usuário. Portanto, aplicativos do .NET Framework 4 executar diretamente, sem exibir a caixa de diálogo, em Windows 8.

Quando o .NET Framework 3.5 está instalado, os usuários podem executar aplicativos que dependem do .NET Framework 2.0, 3.0 ou 3.5 em seus Windows 8 computadores. Eles também podem executar .NET Framework 1.0 e 1.1 aplicativos, desde que esses aplicativos não são explicitamente configurados para ser executado somente no .NET Framework 1.0 ou 1.1. Consulte Migrando do .NET Framework 1.1.

Começando com o .NET Framework 4.5, registro de ativação do CLR foi aprimorado para incluir entradas de log que registram quando e por que a mensagem de erro de inicialização é exibida. Para obter mais informações, consulte Como depurar problemas de ativação do CLR.

Mostrar: