首页 > 解决方案 > 仅当用户通过远程桌面连接时才会引发远程过程调用 (RPC) 错误

问题描述

我正在尝试解决在无人参与的 Windows 服务应用程序尝试通过互操作创建新的 Excel 文件时发生的以下远程过程调用 (RPC) 错误。

Exception: System.Runtime.InteropServices.COMException (0x800706BE): The remote procedure call failed. (Exception from HRESULT: 0x800706BE)
   at Microsoft.Office.Interop.Excel.Workbooks.Add(Object Template)

这是引发异常的代码。对于上下文,我在罪魁祸首代码前后添加了几行代码。

' Create Excel objects
Dim objExcelApp As New Excel.Application
Dim objExcelBooks As Excel.Workbooks = objExcelApp.Workbooks 'This is the specific line it fails on every time.
Dim objExcelBook As Excel.Workbook = objExcelBooks.Add
Dim objExcelSheet As Excel.Worksheet = objExcelApp.ActiveSheet

虽然这段代码在过去的 7 年里没有任何问题,但在将服务从 Windows Server 2008 R2 迁移到 Windows Server 2016 时立即开始出现此错误。经过多次试验、错误和拔毛,我终于发现这个错误只是当有人通过远程桌面连接到服务器时抛出。如果没有人通过远程桌面连接,一切都会完美无缺。

我无法弄清楚为什么只有当有人通过远程桌面连接到服务器时才会出现此错误?

到目前为止,这是我尝试过的一些事情。

标签: excelvb.netexcel-interop

解决方案


受到 Caius Jard 建议的启发,我最终选择了ClosedXML。它快速、轻量、可免费用于商业用途,并且不依赖 Excel 或 Excel.Interop 库的安装来运行。最好的部分不仅是它解决了我的问题,而且完成相同的事情需要更少的代码行。


推荐阅读