![Excel 互操作 - 远程过程调用失败或 RPC_E_SERVERFAULT](https://linux22.com/image/1507037/Excel%20%E4%BA%92%E6%93%8D%E4%BD%9C%20-%20%E8%BF%9C%E7%A8%8B%E8%BF%87%E7%A8%8B%E8%B0%83%E7%94%A8%E5%A4%B1%E8%B4%A5%E6%88%96%20RPC_E_SERVERFAULT.png)
我们有一个内部调用 Excel 的 C# 应用程序。它使用 Microsoft.Office.Interop.Excel.dll 来实现。该应用程序可在大多数装有 Excel 的计算机上运行,但在我的计算机上不行。
最初,应用程序失败,错误代码为 HRESULT 0x800706BE(远程过程调用失败)。我尝试了网上几乎所有的建议,但都没有成功。然后我卸载了我的 MS Office 2013 Pro,并安装了 Office 365 v2013。应用程序仍然在同一行代码上失败,但现在错误代码为 HRESULT 0x80010105(RPC_E_SERVERFAULT)。
您能给出什么建议让 Excel 互操作正常工作吗?我猜是某个 Windows 服务未启动或某个 DCOM 组件未注册。但我不知道是哪一个。
细节:
- Windows 7 x64,MS Office 2013 Pro/365 ProPlus
- 这是一个 C# 应用程序。它是使用 VS2010 for .NET 4.0 编译的,但即使使用 VS2012 for .NET 4.5 编译该应用程序,问题也会出现。使用不同版本的 Microsoft.Office.Interop.Excel.dll。
我认为有三个事实很重要:
- 该应用程序可以在其他计算机上运行,因此问题的原因不是应用程序。
- 即使重新安装(略有不同的版本)excel(2013)后,应用程序仍然无法运行,因此这可能不是 excel 本身的问题。
- 我使用 SysInternals 的 ProcessMonitor 发现应用程序确实成功实例化了 excel,并且 excel 成功(?)读取了 .xlsx 文件。但随后 excel 失败了。
我还使用了 VS2010 调试器来查明发生了什么:
这是代码的核心。它在 Open 的最后一行失败:
using Excel = Microsoft.Office.Interop.Excel; object misValue = System.Reflection.Missing.Value; Excel.Application myExcelApp = new Excel.Application(); myExcelApp.Visible = false; myExcelWorkbooks = myExcelApp.Workbooks; myExcelWorkbook = myExcelWorkbooks.Open(xlsxFileFullPath, misValue, misValue, misValue, misValue, misValue, misValue, misValue, misValue, misValue, misValue, misValue, misValue, misValue, misValue);
Windows 事件日志中没有任何相关内容(应用程序失败时)。
- 以下是我找到的一些链接,但没有给出建议,或者没有帮助:链接1,链接2,...(不能发布超过 2 个链接)
答案1
经过长时间的研究,我成功地解决了这个问题关联。本质上,问题是由第三方 Excel COM 插件引起的,在我的情况下是“FoxitReader PDF Creator COM 插件”。禁用它后,问题就消失了!
如何禁用该插件:Excel > 文件 > 选项 > 加载项 > 管理,然后选择“COM 加载项” > 前往。然后取消勾选有问题的插件。
答案2
我遇到了与 xarx 完全相同的问题。我创建的一个应用程序突然在某些 PC 上停止运行。崩溃的代码是:
Dim fname As String = "B:\Data Warehouse\Lists\WarehouseLists.xls"
Try
xlWorkBookList = xlAppLists.Workbooks.Open(fname,, False) 'open the raw data sheet
Catch ex As Exception
MessageBox.Show(ex.Message)
Exit Sub
End Try
禁用 Foxit Reader 插件可以立即解决该问题。