Knowledge Base KB0236

Konflikt mit Oracle SmartView: Excel stürzt scheinbar zufällig ab

Problem

Ich habe think-cell und Oracle SmartView installiert. Irgendwann, während ich in Excel arbeite, erhalte ich eine CRITICALWITHMSG n/a: std::terminate() Fehlermeldung und Excel stürzt ab.

think-cell Fehlermeldung.

Benutzer berichteten, dass das Problem in verschiedenen Situationen auftritt, z. B. bei dem Versuch:

  • Daten mit SmartView hochzuladen
  • mit der Oracle Umgebung zu verbinden
  • Werte durch Tippen in eine Zelle einzugeben
  • den Inhalt einer Oracle SmartView Zelle zu löschen, z. B. durch Drücken von BACKSPACE

Analyse

Unsere Analyse hat ergeben, dass Oracle bestimmte Ausnahmen in seinem Code nicht behandelt. Dieses Verhalten wird nicht unterstützt und kann zu einem Absturz von Excel führen:

HSADDIN.DLL (das zu SmartView gehört) ruft Excel::Window::PointsToScreenPixelsX innerhalb eines WM_TIMER Callbacks auf, und dieser Anruf schlägt ziemlich oft mit VBA_E_IGNORE fehl. Dieses HRESULT wird durch den COM-Call-Wrapper in eine _com_error Ausnahme gewrappt, aber nicht behandelt und fällt in den Windows-WM_TIMER-Dispatch-Mechanismus. Es ist nicht erlaubt, dass Ausnahmen dem Anwendungscode entgehen, sodass ein Absturz zu erwarten ist.

Standardmäßig enthält der WM_TIMER Dispatch-Mechanismus jedoch einen catch-all __try __except Schutz, der die Ausnahme abfängt und alle Konsequenzen unterdrückt. Seit Kurzem gibt es in Office 365 eine von Microsoft kontrollierte Einstellung in Form eines Feature Gates mit dem Namen Microsoft.Office.AppHost.ExposeTimerProcSeh. Sie bewirkt, dass Excel den Rat von Microsoft befolgt und den oben beschriebenen catch-all __try __except Schutz deaktiviert, indem die Win32 API-Funktion SetUserObjectInformationW(..., UOI_TIMERPROC_EXCEPTION_SUPPRESSION, ...) aufgerufen wird. Dies führt zum Absturz von Excel, wenn die Ausnahme auftritt.

Wir wissen nicht, wann Microsoft diese Einstellung aktiviert, aber wir haben gesehen, dass sie auf Computern aktiviert ist, auf denen der Fehler auftritt. Wenn think-cell installiert ist, fängt es die Ausnahme zufällig ab und zeigt eine Fehlermeldung an. Es ist ziemlich sicher, dass all dies von Oracle nicht beabsichtigt ist und sie einfach vergessen haben, VBA_E_IGNORE in ihrem Add-in zu berücksichtigen.

Lösung

Die betroffenen Kunden berichteten, dass das Problem durch die Aktualisierung auf Oracle SmartView Version 21.200 behoben wird. Wenn dies nicht hilft, wenden Sie sich bitte an Ihren Oracle SmartView-Support, um weitere Informationen zu erhalten.

Teilen