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

Problema

È stato installato think-cell e Oracle Smart View. A un certo punto, mentre si lavora in Excel, si riceve un messaggio di errore CRITICALWITHMSG n/a: std::terminate() e Excel si arresta in modo anomalo.

think-cell error message

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

  • caricare dati utilizzando Smart View
  • connettersi all’ambiente Oracle
  • inserire valori digitando in una cella
  • eliminare il contenuto di una cella Oracle Smart View, ad es. premendo BACKSPACE

Analisi

Nella nostra analisi, sembra che Oracle non gestisca alcune eccezioni nel proprio codice. Questo comportamento non è supportato e può comportare 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 spesso questa chiamata non riesce con VBA_E_IGNORE. Questo HRESULT è racchiuso in un’eccezione _com_error dal call wrapper COM, ma non è gestito e ricade nel meccanismo di invio WM_TIMER di Windows. Non è consentita l’applicazione del codice “consenti escape eccezioni”, quindi è previsto un arresto anomalo.

Tuttavia, per impostazione predefinita, il meccanismo di invio WM_TIMER contiene un blocco catch-all __try __except che rileva l’eccezione e disattiva le conseguenze. Più di recente, Office 365 dispone di un’impostazione controllata da Microsoft che chiama una funzionalità gate nominata Microsoft.Office.AppHost.ExposeTimerProcSeh, che consente a Excel di seguire i consigli di Microsoft e disabilita il blocco catch-all __try __except descritto in precedenza chiamando la funzione Win32 API SetUserObjectInformationW(..., UOI_TIMERPROC_EXCEPTION_SUPPRESSION, ...). Ciò causa l’arresto anomalo di Excel quando si verifica l’eccezione.

Non sappiamo quando Microsoft abilita questa impostazione, ma abbiamo rilevato che è abilitata sui computer in cui si verifica l'errore. Se think-cell è installato, rileva l'eccezione per errore e visualizza un messaggio di errore. È abbastanza sicuro che tutto questo non sia voluto da Oracle e che si siano semplicemente dimenticati di gestire VBA_E_IGNORE nel loro add-in.

Soluzione

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