Condividi tramite


Errori di inizializzazione di .NET Framework: gestione dell'esperienza utente

Annotazioni

Questo articolo è specifico di .NET Framework. Non si applica alle implementazioni più recenti di .NET, incluse .NET 6 e versioni successive.

Il sistema di attivazione CLR (Common Language Runtime) determina la versione di CLR che verrà usata per eseguire il codice dell'applicazione gestita. In alcuni casi, il sistema di attivazione potrebbe non essere in grado di trovare una versione di CLR da caricare. Questa situazione si verifica in genere quando un'applicazione richiede una versione CLR non valida o non installata in un determinato computer. Se la versione richiesta non viene trovata, il sistema di attivazione CLR restituisce un codice di errore HRESULT dalla funzione o dall'interfaccia chiamata e può visualizzare un messaggio di errore all'utente che esegue l'applicazione. Questo articolo fornisce un elenco di codici HRESULT e spiega come è possibile impedire la visualizzazione del messaggio di errore.

CLR fornisce l'infrastruttura di registrazione che consente di eseguire il debug dei problemi di attivazione CLR, come descritto in Procedura: Eseguire il debug dei problemi di attivazione CLR. Questa infrastruttura non deve essere confusa con i registri di associazione di assembly, che sono completamente diversi.

Codici HRESULT di attivazione CLR

Le API di attivazione CLR restituiscono codici HRESULT per segnalare il risultato di un'operazione di attivazione a un host. Gli host CLR devono sempre consultare questi valori restituiti prima di procedere con operazioni aggiuntive.

  • CLR_E_SHIM_RUNTIMELOAD

  • CLR_E_SHIM_RUNTIMEEXPORT

  • CLR_E_SHIM_INSTALLROOT

  • CLR_E_SHIM_INSTALLCOMP

  • CLR_E_SHIM_LEGACYRUNTIMEALREADYBOUND

  • CLR_E_SHIM_SHUTDOWNINPROGRESS

Interfaccia utente per gli errori di inizializzazione

Se il sistema di attivazione CLR non è in grado di caricare la versione corretta del runtime richiesto da un'applicazione, viene visualizzato un messaggio di errore per informare gli utenti che il computer non è configurato correttamente per l'esecuzione dell'applicazione e offre loro la possibilità di risolvere la situazione. In questa situazione viene in genere visualizzato il messaggio di errore seguente. L'utente può scegliere per accedere a un sito Web Microsoft in cui è possibile scaricare la versione corretta di .NET Framework per l'applicazione.

Finestra di dialogo Errore di inizializzazione di .NET Framework

Risoluzione dell'errore di inizializzazione

Gli sviluppatori hanno a disposizione un'ampia gamma di opzioni per controllare il messaggio di errore di inizializzazione di .NET Framework. Ad esempio, è possibile usare un flag API per impedire la visualizzazione del messaggio, come illustrato nella sezione successiva. Tuttavia, è comunque necessario risolvere il problema che impediva all'applicazione di caricare il runtime richiesto. In caso contrario, l'applicazione potrebbe non essere eseguita affatto o alcune funzionalità potrebbero non essere disponibili.

Per risolvere i problemi sottostanti e offrire un'esperienza utente ottimale (un minor numero di messaggi di errore), è consigliabile:

Controllo del messaggio di errore

La visualizzazione di un messaggio di errore per comunicare che non è stata trovata una versione richiesta di .NET Framework può essere visualizzata come un servizio utile o un'infastidità secondaria per gli utenti. In entrambi i casi, è possibile controllare questa interfaccia utente passando flag alle API di attivazione.

Il metodo ICLRMetaHostPolicy::GetRequestedRuntime accetta un membro di enumerazione METAHOST_POLICY_FLAGS come input. È possibile includere il flag METAHOST_POLICY_SHOW_ERROR_DIALOG per richiedere un messaggio di errore se la versione richiesta di CLR non viene trovata. Per impostazione predefinita, il messaggio di errore non viene visualizzato. Il metodo ICLRMetaHost::GetRuntime non accetta questo flag e non fornisce altri modi per visualizzare il messaggio di errore.

Windows fornisce una funzione SetErrorMode che è possibile usare per dichiarare se si desidera che i messaggi di errore vengano visualizzati come risultato del codice eseguito all'interno del processo. È possibile specificare il flag SEM_FAILCRITICALERRORS per impedire la visualizzazione del messaggio di errore.

In alcuni scenari, tuttavia, è importante eseguire l'override dell'impostazione di SEM_FAILCRITICALERRORS impostata da un processo dell'applicazione. Ad esempio, se si dispone di un componente COM nativo che ospita CLR e che è ospitato in un processo in cui è impostato SEM_FAILCRITICALERRORS, è possibile eseguire l'override del flag, a seconda dell'impatto della visualizzazione dei messaggi di errore all'interno di tale processo dell'applicazione specifico. In questo caso, è possibile usare uno dei flag seguenti per eseguire l'override di SEM_FAILCRITICALERRORS:

Criteri dell'interfaccia utente per gli host forniti da CLR

CLR include un set di host per diversi scenari e questi host visualizzano tutti un messaggio di errore quando si verificano problemi durante il caricamento della versione richiesta del runtime. La tabella seguente contiene un elenco di host e i relativi criteri di messaggio di errore.

Host CLR Descrizione Politica del messaggio di errore È possibile disabilitare il messaggio di errore?
Host EXE gestito Avvia exes gestiti. Viene visualizzato in caso di versione di .NET Framework mancante NO
Host COM gestito Carica i componenti COM gestiti in un processo. Viene visualizzato in caso di versione di .NET Framework mancante Sì, impostando il flag di SEM_FAILCRITICALERRORS
Host ClickOnce Avvia le applicazioni ClickOnce. Viene visualizzato in caso di versione di .NET Framework mancante, a partire da .NET Framework 4.5 NO
Host XBAP Avvia applicazioni XBAP WPF. Viene visualizzato in caso di versione di .NET Framework mancante, a partire da .NET Framework 4.5 NO

Comportamento e interfaccia utente di Windows 8

Il sistema di attivazione CLR fornisce lo stesso comportamento e l'interfaccia utente in Windows 8 come in altre versioni del sistema operativo Windows, tranne quando si verificano problemi di caricamento di CLR 2.0. Windows 8 include .NET Framework 4.5, che usa CLR 4.5. Tuttavia, Windows 8 non include .NET Framework 2.0, 3.0 o 3.5, che tutti usano CLR 2.0. Di conseguenza, le applicazioni che dipendono da CLR 2.0 non vengono eseguite in Windows 8 per impostazione predefinita. Visualizzano invece la finestra di dialogo seguente per consentire agli utenti di installare .NET Framework 3.5. Gli utenti possono anche abilitare .NET Framework 3.5 nel Pannello di controllo. Entrambe le opzioni sono illustrate nell'articolo Installare .NET Framework 3.5 in Windows 11, Windows 10, Windows 8.1 e Windows 8.

Finestra di dialogo per l'installazione di 3.5 in Windows 8

Annotazioni

.NET Framework 4.5 sostituisce .NET Framework 4 (CLR 4) nel computer dell'utente. Pertanto, le applicazioni .NET Framework 4 vengono eseguite senza problemi, senza visualizzare questa finestra di dialogo, in Windows 8.

Quando è installato .NET Framework 3.5, gli utenti possono eseguire applicazioni che dipendono da .NET Framework 2.0, 3.0 o 3.5 nei computer Windows 8. Possono anche eseguire applicazioni .NET Framework 1.0 e 1.1, purché tali applicazioni non siano configurate in modo esplicito per l'esecuzione solo in .NET Framework 1.0 o 1.1. Vedere Migrazione da .NET Framework 1.1.

A partire da .NET Framework 4.5, la registrazione dell'attivazione CLR è stata migliorata per includere voci di log che registrano quando e perché viene visualizzato il messaggio di errore di inizializzazione. Per altre informazioni, vedere Procedura: Eseguire il debug di problemi di attivazione CLR.

Vedere anche