【问题标题】:Excel Interlop Error on New Server after migration迁移后新服务器上的 Excel 互操作错误
【发布时间】:2024-04-10 14:40:02
【问题描述】:

我最近将 Windows 服务迁移到了我公司的新服务器。该服务使用模板从 sql 表中读取数据并从中构建一个 excel 文档。不幸的是,即使使用所有相同的代码,当我尝试执行服务时也会遇到新错误。

Exception from HRESULT: 0x800A03EC 
Stack Trace: 
at Microsoft.Office.Interop.Excel.Workbooks.Open(String Filename, Object 
UpdateLinks, Object ReadOnly, Object Format, Object Password, Object 
WriteResPassword, Object IgnoreReadOnlyRecommended, Object Origin, Object 
Delimiter, Object Editable, Object Notify, Object Converter, Object 
AddToMru, Object Local, Object CorruptLoad)

这是导致错误的执行代码:

        Dim xlApp As Excel.Application
        Dim xlWorkBook As Excel.Workbook
        Dim xlWorkSheet As Excel.Worksheet

        xlApp = New Excel.ApplicationClass
        xlWorkBook = xlApp.Workbooks.Open(System.AppDomain.CurrentDomain.BaseDirectory() & strTemplatePath)

旧服务器运行 Microsoft Windows Server 2003 SP2,新服务器运行 Microsoft Windows Server 2012 Datacenter。两者都安装了 Excel 2003。

我的尝试:

祷告

为执行应用的用户提供权限

将我的 CurrentCulture 设置为“en-US”

将模板文件移动到 c:\Templates 以防程序文件目录出现奇怪问题

匹配 dcomcnfg 和 mmc-32 中“Microsoft Excel 应用程序”的两个服务器设置(均未设置为“交互式用户”)

用我能找到的最新版本 (15.0.4795.1000) 替换当前使用的 Excel Interlop 文件 (11.0.8161.0)

任何帮助将不胜感激。谢谢

回应cmets:

检查 BaseDirectory 和 strTemplatePath 会生成我的 excel 工作簿的有效路径。如果我将其直接粘贴到资源管理器地址栏中,则会打开文件。

【问题讨论】:

  • 在 Visual Studio 中调试时 - 检查 BaseDirectory 和 strTemplatePath 时本地窗口或即时窗口会显示什么
  • xlApp = New Excel.ApplicationClass 更改为xlApp = New Excel.Application - 所以去掉Class这个词。即使它有时有效,它也不正确。

标签: excel vb.net service server


【解决方案1】:

我在以下网址找到了答案,结果证明是超级随机的: https://www.codeproject.com/Questions/574791/COMplusExceptionplushresultplus-x-a-ecplusatplu

要让它开始工作,我所要做的就是创建以下目录:

C:\Windows\SysWOW64\config\systemprofile\Desktop

【讨论】:

    最近更新 更多