C # COM Office-Automation - RPC_E_SYS_CALL_FAILED
Frage
Ich schreibe einen C # -Programm, das als Powerpoint 2007-Plugin wirkt. Auf einigen Maschinen ein COMException
mit der Nachricht RPC_E_SYS_CALL_FAILED
einige Anrufe an das Powerpoint-Objektmodell werfen. Ich konnte keine spezifische Beratung finden, was diesen Fehler zu tun in Bezug auf, oder wie es zu vermeiden. Von googeln sieht es aus wie etwas, mit der Message Queue oder Single-Threaded-Apartment zu tun. Oder bin ich weg?
Beispiel für die Fehlermeldung lautet:
Systemaufruf ist fehlgeschlagen. (Ausnahme von HRESULT: 0x80010100 (RPC_E_SYS_CALL_FAILED))
bei Microsoft.Office.Interop.PowerPoint._Presentation.get_FullName ()
Leider ist das Problem auf einer Client-Maschine auftreten, so habe ich keine einfache Möglichkeit, es zu debuggen! Soll ich versuche nur die Anrufe, wenn ich diesen Fehler?
Jede Beratung, mir zu helfen dieses Problem zu beheben wäre sehr dankbar!
Lösung
Ich weiß nicht, es zu einem Problem zu tun haben, sondern alle Ihre COM Anrufe kommen aus muss das Add-In im selben Thread erstellt wurde. Wenn Sie neue Themen erstellt wurden, müssen Sie besondere Sorgfalt walten lassen. Einzelheiten sind in diesen beiden Artikeln beschrieben:
Andere Tipps
machen Sie den Anruf von einem Thread mit seinem Apartment Satz? wenn nicht, das könnte die Ursache sein - COM-Interop ist ziemlich pingelig über diese Art der Sache
Was sind die Sicherheitseinstellungen des Kunden? Es ist durchaus möglich, dass sie die Sicherheitseinstellungen des Clients (Windows / OS Einstellungen oder Powerpoint / App-Einstellungen) werden Ihr Plug-in nicht zulassen, dass über RPC kommunizieren.
Dies kann sehr leicht passieren, wenn Sie Anrufe auf das Powerpoint-Objektmodell von einem Hintergrund-Thread zu machen. Ein plausibles Szenario wird mit einem Timer, der in regelmäßigen Abständen eine Art Statuswert überprüft. Wenn bei den Timer Bränden, Powerpoint besetzt ist (zum Beispiel eines Dialogfeld geöffnet ist) wird der Anruf fehlschlagen.
Mit diesem Microsoft-Artikel gibt einen Überblick über Unterstützung in Office Einfädeln: http://msdn.microsoft.com/en-us/library/8sesy69e. aspx