2010-09-22 1 views
5

Sto tentando di collegare un gestore di eccezioni non gestito per .NET exin addin. Il problema è che il gestore delle eccezioni non viene mai chiamato.intrappolamento delle eccezioni non gestite in .NET excel addins (XLL)?

AppDomain.CurrentDomain.UnhandledException non funziona: non viene mai generato l'evento.

Application.Current.DispatcherUnhandledException non può essere utilizzato poiché l'applicazione è nullo nel codice addin di excel.

come collegare quindi un gestore di eccezioni non gestito?

+0

Un XLL è un componente aggiuntivo vecchio stile basato su codice non gestito. Sì, UnhandledException non verrà necessariamente eseguito quando si verifica un codice non gestito. Excel entrerebbe per primo. –

+0

Ma non è il codice non gestito che esplode .. è il codice .NET all'interno del componente aggiuntivo che genera un'eccezione. perché non può essere intrappolato da qualche parte? – Pradeep

+0

Che tipo di componente aggiuntivo è presente? È un add-in 'IDTExtensibility2' o è stato creato usando VSTO (Visual Studio Tools per Office) utilizzando uno dei modelli di progetto in VS 2005/2008/2010? I componenti aggiuntivi XLL sono rigorosamente * non gestiti *, quindi questo non può essere il tipo di componente aggiuntivo in esecuzione. –

risposta

3

Potrebbe non essere possibile, poiché l'applicazione è in realtà un'applicazione non gestita. Potresti dover semplicemente provare/catturare blocchi attorno a zone traballanti.

+4

corretto. Poiché Excel è il chiamante, spetta a Excel gestire l'Eccezione o meno. Se Excel lo gestisce, non c'è un'eccezione non gestita. Se Excel non lo gestisce, Excel si arresta in modo anomalo. È così semplice. In entrambi i casi, l'esecuzione del codice gestito termina alla barriera di interoperabilità COM. La chiave non è tanto quella di circondare tutte le "aree instabili", ma di usare la gestione degli errori attorno a tutti i punti di ingresso in cui Excel chiama il tuo codice. –

+0

Unico problema è se si utilizzano thread in background e librerie Async. Non una bella vista! –