如果我尝试在客户机上打开Excel文件,则会抛出以下异常:
Exception from HRESULT: 0x800A03EC
内部异常:(空)
堆栈跟踪:
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)
at (own assembly)
这个HResult是一个非常通用的错误,我无法通过它找到任何有用的信息。
我的设置:
在Windows服务中运行的WCF服务。完全相同的设置在其他三台机器上都可以正常工作。
我可以排除以下原因:
- 路径错误
- 文件不存在
- 文件已损坏
- 文件被写保护
我所做的事情:
- 按照此处所见创建了桌面文件夹(第二个答案)https://social.msdn.microsoft.com/Forums/vstudio/en-US/4d6c383a-94eb-4898-9d22-aa4bb69be25b/
- 将桌面文件夹授权给“Everyone”或“Jeder”权限(“Jeder”是德语中“Everyone”的等效词)
- 使用当前活动用户启动服务
- 根据Heidi2的建议更改Excel的DCOM配置(请参见上面的链接)
- 从Office 365更改为Office Professional Plus
- 在尝试打开文件时将区域设置为en-US
- 手动打开了应该打开的文件:Excel没有出现任何错误/警告/用户对话框
- 在目标机器上安装了英语-US
- 编写了一个非WCF服务,它启动执行Interop请求的dll
- 编写了一个控制台应用程序,它启动执行Interop请求的dll
一些观察结果:
- 如果我删除桌面文件夹(请参见我的“我所做的事情”部分),我会得到如下描述和解决方案的错误:Microsoft Office Excel cannot access the file 'c:\inetpub\wwwroot\Timesheet\App_Data\Template.xlsx'
- 当dll尝试打开Excel文件时,Excel在任务管理器中短暂打开
- 在安装Office 365时,Office Click-Once任务在任务管理器中弹出,有时会冻结应用程序。这就是为什么我切换到Professional Plus的原因
- 如果将活动语言设置为英语-US,则不再抛出此错误;但是由Interop渲染的图像将被渲染为空白
我在这里漏掉了什么?