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ò comportare un arresto anomalo di Excel:

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 nominata Microsoft.Office.AppHost.ExposeTimerProcSeh, che consente a Excel di seguire i consigli di Microsoft e disabilita il catch-all __try __except blocco 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 SmartView versione 21.200 risolve il problema. Se ciò non aiuta, contattare l’assistenza Oracle SmartView per ulteriori informazioni.

Condividi