注销服务器时Excel和C#出错

时间:2012-01-31 06:21:24

标签: c# .net excel windows-services

我用C#编写了一个Windows服务。我的服务是打开一个启用Excel宏的工作簿(这是在Excel 2010中)。我已经在运行Windows Server 2008 64位的服务器上安装了此服务。当没有人在服务器上登录时,我的服务似乎在启动Excel时出现问题,是否有人有解决方案?

我收到以下错误:

  

System.Runtime.InteropServices.COMException(0x8000401A):由于以下错误,检索CLSID为{00024500-0000-0000-C000-000000000046}的组件的COM类工厂失败:8000401a。

Excel已安装在服务器上,当我登录服务器时服务正常,但是一旦所有用户都注销,我就会收到上述错误。无论服务器上是否有打开的会话,我都希望该服务能够启动我的Excel工作簿。

3 个答案:

答案 0 :(得分:5)

  

当服务器上没有人登录时,我的服务似乎在启动Excel时出现问题,是否有人有解决方案。

当然有问题。 Windows Services cannot show a user interface,那么当没有用户登录时,你会如何期望它启动像Microsoft Excel这样的GUI应用程序?

您收到的特定COM错误代码表示:

  

8000401a:无法启动服务器进程,因为配置的标识不正确。检查用户名和密码。

换句话说,Excel正在尝试以交互式用户身份启动,该用户指的是当前直接登录到服务器控制台的用户。由于没有用户登录,因此不存在交互式用户,并且当应用程序尝试采用此标识时应用程序将失败。

无论如何设计都被破坏了:Excel不是为从Windows服务运行而设计的。请改为创建标准Windows应用程序。如果您需要在没有自己的UI的情况下在后台运行,请不要创建窗口。

答案 1 :(得分:1)

基本上,Cody Gray的回答是正确的。过去,我需要从Windows服务启动Excel才能打印文件。

我们能够通过将服务设置为以特定用户帐户身份运行来解决此类错误,并不时以该用户帐户登录并尝试启动未能看到错误消息的文件通过Excel。

在您的情况下,可能是因为Excel首次启动,它会询问您的姓名首字母。

答案 2 :(得分:1)

您使用Office Automation启动Excel吗?抱歉,服务进程不支持Office Automation。它旨在仅在交互式过程中工作。

如果您很幸运,从服务流程使用Office Automation将无法正常工作。如果你不幸运,它将出现工作,你实际上将你的应用程序投入生产。然后,您将开始发现难以重现的随机错误,甚至更难以修复而不会破坏其他错误。

这是因为真正的错误是设计错误 - 您从服务流程中使用了Office Automation。

从体验之声中获取......