Knowledge base KB0236

Conflitto con Oracle SmartView: excel si arresta in modo anomalo e casuale

Problema

Ho installato think-cell e Oracle SmartView. A un certo punto, mentre lavoro in Excel, ricevo un messaggio di errore CRITICALWITHMSG n/a: std::terminate() e Excel si arresta in modo anomalo.

Messaggio di errore think-cell

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

  • Caricare dati utilizzando SmartView
  • Connettersi all'ambiente Oracle
  • Inserire valori digitando in una cella
  • Eliminare il contenuto di una cella Oracle SmartView, ad es. premendo BACKSPACE

Analisi

Nella nostra analisi, sembra che Oracle non gestisca alcune eccezioni nel proprio codice. Questo comportamento non è supportato e può portare a un arresto anomalo:

HSADDIN.DLL (che appartiene a SmartView) 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 chiamata 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

Non possiamo adottare una nostra soluzione a questo crash. Per una soluzione permanente, contattare l’assistenza Oracle SmartView.

Condividi