KB0236: Conflitto con Oracle Smart View: Excel si arresta in modo anomalo

Problema

Ho installato thinkcell e Oracle Smart View. A un certo punto, mentre si lavora in Excel, viene visualizzato un messaggio di errore CRITICALWITHMSG n/a: std::terminate() ed Excel si arresta in modo anomalo.

messaggio di errore di thinkcell

Gli utenti hanno segnalato che il problema si verifica in varie situazioni, ad esempio quando si tenta di:

  • caricare i dati utilizzando Smart View
  • connettersi all’ambiente Oracle
  • immettere valori digitandoli in una cella
  • eliminare il contenuto di una cella Oracle Smart View, ad esempio premendo BACKSPACE

Analisi

Nella nostra analisi, sembra che Oracle non gestisca determinate eccezioni nel proprio codice. Questo non è un comportamento supportato e può causare un arresto anomalo di Excel: Scopri di più

HSADDIN.DLL (che appartiene a Smart View) chiama Excel::Window::PointsToScreenPixelsX all’interno di un callback WM_TIMER e questa chiamata non riesce abbastanza spesso con VBA_E_IGNORE. Questo HRESULT viene incapsulato in un’eccezione _com_error dal wrapper di chiamata COM, ma non viene gestito e passa al meccanismo di dispatch WM_TIMER di Windows. Consentire alle eccezioni di uscire dal codice dell’applicazione non è consentito, quindi è previsto un arresto anomalo.

Per impostazione predefinita, tuttavia, il meccanismo di dispatch WM_TIMER contiene un blocco catch-all __try __except, che intercetta l’eccezione e ne elimina qualsiasi conseguenza. Più di recente, Office 365 dispone di un’impostazione controllata da Microsoft chiamata feature gate denominata Microsoft.Office.AppHost.ExposeTimerProcSeh, che fa sì che Excel segua il consiglio di Microsoft stessa e disabiliti il blocco catch-all __try __except descritto sopra chiamando la funzione API Win32 SetUserObjectInformationW(..., UOI_TIMERPROC_EXCEPTION_SUPPRESSION, ...). Questo causa l’arresto anomalo di Excel quando si verifica l’eccezione.

Non sappiamo quando Microsoft abiliti questa impostazione, ma l’abbiamo vista abilitata nei computer in cui si verifica l’errore. Se thinkcell è installato, intercetta l’eccezione per caso e mostra un messaggio di errore. È abbastanza certo che tutto questo non sia intenzionale da parte di Oracle e che abbiano semplicemente dimenticato di gestire VBA_E_IGNORE nel loro componente aggiuntivo.

Soluzione

I clienti interessati hanno segnalato che l’aggiornamento a Oracle Smart View versione 21.200 risolve il problema. Se ciò non è utile, contattare il supporto Oracle Smart View per ulteriori informazioni.