Per visualizzare l'articolo in inglese, selezionare la casella di controllo Inglese. È possibile anche visualizzare il testo inglese in una finestra popup posizionando il puntatore del mouse sopra il testo.
Traduzione
Inglese

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

.NET Framework (current version)
 

Il sistema di attivazione di Common Language Runtime (CLR) determina la versione di CLR che verrà utilizzato per eseguire il codice dell'applicazione gestito.  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 nel computer.  Se la versione richiesta non viene trovata, il sistema di attivazione CLR restituisce un codice di errore HRESULT dalla funzione o dall'interfaccia da cui è stato chiamato e può visualizzare un messaggio di errore all'utente che esegue l'applicazione.  In questo articolo sono presenti un elenco dei codici HRESULT e viene illustrato come sia possibile impedire la visualizzazione del messaggio di errore.  

CLR fornisce un'infrastruttura di registrazione per eseguire il debug dei problemi di attivazione CLR, come descritto in Procedura: debug dei problemi di attivazione CLR.  Questa infrastruttura non deve essere confusa con i log dell'associazione di assembly, che sono completamente differenti.  

Le API di attivazione CLR ritornano codici HRESULT per comunicare ad un host il risultato di un'operazione d'attivazione.  Gli host di CLR devono consultare sempre questi valori restituiti prima di procedere con le 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

Se il sistema di attivazione CLR non riesce a caricare la versione corretta del runtime richiesto da un'applicazione, viene visualizzato un messaggio di errore agli utenti per notificare loro che il computer non è correttamente configurato per eseguire l'applicazione e fornisce loro un'opzione per risolvere la situazione.  Il seguente messaggio di errore si presentata in genere in questa situazione.  L'utente può scegliere per passare ad un sito Web Microsoft dove può scaricare la versione di .NET Framework corretta per l'applicazione.  

Finestra di dialogo Errore di inizializzazione di .NET Framework

Messaggio di errore tipico per gli errori di inizializzazione

Lo sviluppatore ha a disposizione diverse opzioni per il controllo del messaggio di errore di inizializzazione di .NET Framework.  Ad esempio, è possibile utilizzare un flag di API per impedire che il messaggio venga visualizzato, come descritto nella sezione successiva.  Tuttavia, è ancora necessario risolvere il problema che ha impedito all'applicazione il caricamento del runtime richiesto.  In caso contrario, l'applicazione potrebbe non funzionare affatto, o alcune funzionalità potrebbero non essere disponibili.  

Per risolvere i problemi sottostanti e garantire una migliore esperienza all'utente (meno messaggi di errore), raccomandiamo di seguire i seguenti punti:

  • Per le applicazioni .NET Framework 3.5 (e versioni precedenti): Configurare l'applicazione in modo tale che supporti .NET Framework 4 o 4.5 (vedere istruzioni).

  • Per le applicazioni .NET Framework 4: Installare il pacchetto ridistribuibile di .NET Framework 4 come parte dell'impostazione dell'applicazione.  Vedere Guida alla distribuzione di .NET Framework per sviluppatori.  

La visualizzazione del messaggio di errore il quale comunica che la versione di .NET Framework richiesta non è stata trovata può essere visualizzato agli utenti come servizio utile o come rumore secondario.  In entrambi i casi, è possibile controllare l'interfaccia utente passando i flag API dell'attivazione.  

Il metodo ICLRMetaHostPolicy::GetRequestedRuntime accetta un membro di enumerazione METAHOST_POLICY_FLAGS come input.  È possibile includere il flag di 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 alcun altro modo per visualizzare il messaggio di errore.)  

Windows fornisce una funzione SetErrorMode che può essere utilizzata per dichiarare se si desidera che i messaggi di errore siano visualizzati come conseguenza di codice in esecuzione all'interno del proprio 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 SEM_FAILCRITICALERRORS impostata mediante un processo dell'applicazione.  Ad esempio, se un componente COM nativo che ospita CLR è ospitato in un processo in cui è impostato SEM_FAILCRITICALERRORS, è possibile eseguire l'override del flag, a seconda dell'impatto di visualizzazione dei messaggi di errore di tale processo.  In questo caso, è possibile utilizzare uno dei seguenti flag per eseguire l'override di SEM_FAILCRITICALERRORS:  

CLR include un set di host per diversi scenari, quando si incontrano problemi nel caricamento della versione richiesta del runtime ognuno di questi host visualizzerà un messaggio di errore.  Nella tabella seguente viene fornito un elenco di host ed i relativi criteri del messaggio di errore.  

Host CLR

Descrizione

Criteri del messaggio di errore

Può essere disabilitato il messaggio di errore?

Host EXE gestito

Avviare EXE gestiti.

Viene mostrato nel caso di una versione di .NET Framework mancante

No

Host COM gestito

Carica componenti COM gestiti in un processo.

Viene mostrato nel caso di una versione di .NET Framework mancante

Sì, impostando il flag di SEM_FAILCRITICALERRORS

Host ClickOnce

Avvia applicazioni ClickOnce.

Viene mostrato nel caso di una versione di .NET Framework mancante, a partire da .NET Framework 4.5

No

Host XBAP

Avviare applicazioni WPF XBAP.

Viene mostrato nel caso di una versione di .NET Framework mancante, a partire da .NET Framework 4.5

No

Il sistema di attivazione di CLR fornisce lo stesso comportamento ed interfaccia utente in Windows 8 e nelle altre versioni del sistema operativo Windows, ad eccezione di quando rileva i problemi nel caricare CLR 2.0.  Windows 8 include .NET Framework 4.5, che utilizza CLR 4.5. Tuttavia, Windows 8 non include .NET Framework 2.0, 3.0, o 3.5, i quali utilizzano CLR 2.0.  Di conseguenza, le applicazioni che dipendono da CLR 2.0 non vengono eseguite su Windows 8 per impostazione predefinita.  Invece, viene visualizzata la seguente finestra di dialogo per consentire agli utenti di installare .NET Framework 3.5.  Gli utenti possono anche abilitare .NET Framework 3.5 dal Pannello di controllo.  Entrambe le opzioni sono descritte nell'articolo Installazione di .NET Framework 3.5 in Windows 8, Windows 8.1 e Windows 10.  

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

Richiede l'installazione di .NET Framework 3.5 su richiesta

System_CAPS_noteNota

Il .NET Framework 4.5 sostituisce .NET Framework 4 (CLR 4) nel computer dell'utente.  Di conseguenza, 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 inoltre eseguire applicazioni .NET Framework 1.0 e 1.1, a condizione che tali applicazioni non siano esplicitamente configurate per essere eseguite 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 di attivazione CLR è stata migliorata per includere le voci di registro che salvano le motivazioni della visualizzazione del messaggio di errore.  Per ulteriori informazioni, vedere Procedura: debug dei problemi di attivazione CLR.  

Mostra: