Excel 互操作 - 远程过程调用失败或 RPC_E_SERVERFAULT

Excel 互操作 - 远程过程调用失败或 RPC_E_SERVERFAULT

我们有一个内部调用 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 插件可以立即解决该问题。

相关内容