C#COM办公自动化-RPC#E#u系统调用失败

C#COM办公自动化-RPC#E#u系统调用失败,c#,com,ms-office,C#,Com,Ms Office,我正在编写一个C#程序,它充当PowerPoint 2007插件。在某些计算机上,对PowerPoint对象模型的某些调用会抛出一个COMException,并显示消息RPC\u E\u SYS\u CALL\u FAILED。我找不到关于如何处理此错误或如何避免此错误的任何具体建议。从谷歌上看,这似乎与消息队列或单线程单元有关。还是我走远了 错误消息的示例如下: 系统调用失败。(来自HRESULT的异常:0x80010100(RPC系统调用失败)) 在Microsoft.Office.Inte

我正在编写一个C#程序,它充当PowerPoint 2007插件。在某些计算机上,对PowerPoint对象模型的某些调用会抛出一个
COMException
,并显示消息
RPC\u E\u SYS\u CALL\u FAILED
。我找不到关于如何处理此错误或如何避免此错误的任何具体建议。从谷歌上看,这似乎与消息队列或单线程单元有关。还是我走远了

错误消息的示例如下:

系统调用失败。(来自HRESULT的异常:0x80010100(RPC系统调用失败))
在Microsoft.Office.Interop.PowerPoint上。\u演示文稿。获取\u全名()

不幸的是,问题发生在客户机上,所以我没有简单的方法来调试它!我是否应该在收到此错误时重试呼叫


任何帮助我解决这个问题的建议都将不胜感激

您是否正在使用ApartmentState集从线程进行调用?如果不是,那可能是罪魁祸首-COM interop对这类事情相当挑剔

客户端的安全设置是什么?很可能客户端的安全设置(Windows/OS设置或PowerPoint/App设置)不允许您的插件通过RPC进行通信。

我不知道这与您的问题有关,但您的所有COM调用必须来自创建外接程序的同一线程。如果创建了新线程,则必须特别小心。这两篇文章介绍了详细信息:


如果您从后台线程调用Powerpoint对象模型,则很容易发生这种情况。一种可能的情况是有一个计时器,定期检查某种状态值。如果计时器启动时Powerpoint正忙(例如打开对话框),则呼叫将失败

这篇Microsoft文章概述了Office中的线程支持: