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.
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.