服务器执行失败(来自HRESULT的异常:0x80080005(CO_E_SERVER_EXEC_FAILURE))

时间:2014-02-27 07:52:04

标签: excel interop xls excel-interop dev-to-production

我正在尝试使用Microsoft.Office.Interop.Excel.Workbook类将.xls文件转换为服务器端的.xlsx文件,如下所示:

 workBook.SaveAs("FILENAME_HERE", XlFileFormat.xlOpenXMLWorkbook, Type.Missing, Type.Missing, Type.Missing, Type.Missing, XlSaveAsAccessMode.xlNoChange, Microsoft.Office.Interop.Excel.XlSaveConflictResolution.xlLocalSessionChanges, Type.Missing, Type.Missing, Type.Missing, Type.Missing);

我收到以下错误:

Retrieving the COM class factory for component with CLSID {00024500-0000-0000-C000-000000000046} failed due to the following error: 80080005 Server execution failed (Exception from HRESULT: 0x80080005 (CO_E_SERVER_EXEC_FAILURE)). : System.Runtime.InteropServices.COMException (0x80080005): Retrieving the COM class factory for component with CLSID {00024500-0000-0000-C000-000000000046} failed due to the following error: 80080005 Server execution failed (Exception from HRESULT: 0x80080005 (CO_E_SERVER_EXEC_FAILURE)).
   at System.Runtime.Remoting.RemotingServices.AllocateUninitializedObject(RuntimeType objectType)
   at System.Runtime.Remoting.Activation.ActivationServices.CreateInstance(RuntimeType serverType)
   at System.Runtime.Remoting.Activation.ActivationServices.IsCurrentContextOK(RuntimeType serverType, Object[] props, Boolean bNewObj)
   at System.RuntimeTypeHandle.CreateInstance(RuntimeType type, Boolean publicOnly, Boolean noCheck, Boolean& canBeCached, RuntimeMethodHandleInternal& ctor, Boolean& bNeedSecurityCheck)
   at System.RuntimeType.CreateInstanceSlow(Boolean publicOnly, Boolean skipCheckThis, Boolean fillCache, StackCrawlMark& stackMark)
   at System.RuntimeType.CreateInstanceDefaultCtor(Boolean publicOnly, Boolean skipCheckThis, Boolean fillCache, StackCrawlMark& stackMark)
   at System.Activator.CreateInstance(Type type, Boolean nonPublic)
   at System.Activator.CreateInstance(Type type)
   at CALLING_METHOD_IN_MY_LIBRARY_HERE...

问题是此错误仅在登台服务器上发生;在我的本地机器上它工作正常。

我在登台服务器上尝试过的事情:

  1. ** 1)运行dcomcnfg打开组件服务
  2. 2)展开组件服务“ - >”电脑“ - >”我的电脑“ - >” DCOM配置“

    3)找到“Microsoft Excel应用程序”。

    4)打开属性对话框的权利

    5)点击“安全”标签,

    6)“启动和激活权限,配置权限,添加了权限 - 在管理员用户(此用户),交互式用户和启动用户下运行身份

    7)。启动和激活权限+访问权限+配置权限=>添加了完全控制的IIS_IUSRS +网络服务**

    2。 更改了在我的本地计算机上将.xls文件从“任何CPU”转换为“x86”的项目的构建,并在服务器上发布了此库。

    有人想出如何解决这个问题吗?我正在努力解决这个问题2天了。

7 个答案:

答案 0 :(得分:24)

使用DCOMCNFG.exe。打开它然后去: 组件服务 - >计算机 - >我的电脑 - > DCOM配置 - > Microsoft Excel应用程序

打开属性,选择“身份”选项卡,然后选择交互式用户。

答案 1 :(得分:3)

我发现这篇文章深入讨论了这个问题如果这有帮助, 错误“80080005服务器执行失败(从HRESULT异常:0x80080005(CO_E_SERVER_EXEC_FAILURE))”可能由于以下原因发生:

  1. 机器CPU负载较高,过程需要很长时间 启动并且无法在小于的时间内执行CoRegisterClassObjects() 120秒。
  2. COM服务器不会注册正确的类ID。
  3. COM服务器当前正在停止,并且存在竞争条件 在CoCreateInstance和COM服务器停止部分之间。
  4. COM服务器启动方式存在安全问题 (此页面似乎提示拼写错误的密码或缺少密码 "作为批处理作业登录" " Run As .." COM服务器,但是 无论如何,我建议你重新验证这些信息 具体配置)
  5. https://blogs.msdn.microsoft.com/adioltean/2005/06/24/when-cocreateinstance-returns-0x80080005-co_e_server_exec_failure/

答案 2 :(得分:2)

我通过以下解决方案解决了这个问题: 右键单击组件服务/计算机/ DCOM配置/ Microsoft Word97-2003文档 属性/“常规”标签

设置身份验证级别:无

答案 3 :(得分:0)

通过“允许桌面交互”为我解决了同样的问题。 (在“登录”选项卡上的tomcat6w配置工具中)

答案 4 :(得分:0)

我在其他地方找到了解决方案。

执行以下完成解决了我的问题:

  

使用DCOMCNFG.exe。打开它,然后转到:组件服务->计算机->我的电脑-> DCOM配置-> Microsoft Excel应用程序。打开属性,选择“身份”选项卡,然后选择交互式用户。

但是-问题每隔几分钟就会出现!

经过数小时的尝试找出原因之后,我注意到我的服务器有数百个打开的WINWORD.EXE进程。这引起了内存问题,从而导致了exception from hresult 0x80080005错误。

好吧,很愚蠢,我忘了编写代码以关闭互操作应用程序。一旦我解决了,错误就消失了。

doc.Close(false);
Marshal.ReleaseComObject(doc);
word.Quit();
Marshal.ReleaseComObject(word);

答案 5 :(得分:-1)

您永远都不想在服务器端安装Excel!

请相信我,如果您必须操纵excel工作表,则除了Excel之外,您不想使用其他任何东西。不要使用任何库,因为迟早您会遇到无法修复的错误,或者由于多种原因而无法修复的错误(一个原因就是Excel在做“错误的事情”)。 您只能在客户端上使用Excel。 您的客户端必须安装和维护它。 如果有,请使用它,否则告诉他们,Excel功能仅在客户端计算机上有效的Excel安装中起作用

使用XML,数据集或其他方式将Excel信息流式传输到服务器以进行存储。 或使用服务器端代码而不是Excel处理该数据。

Excel互操作必须始终在客户端计算机上发生。 就这样...

答案 6 :(得分:-3)

尝试在workBook.open和workBook.SaveAs两个方法之后添加Thread.Sleep方法,如Thread.Sleep(2000)2秒。如果您的Excel文件有很多格式,请尝试延长几秒钟。