2012-01-31 59 views
3

我写了C#中的Windows服务。我的服务旨在打开Excel宏功能工作簿(这是在Excel 2010中)。我在运行Windows Server 2008 64位的服务器上安装了此服务。当服务器上没有人登录时,我的服务似乎启动Excel时出现问题,有没有人有解决方案?错误与Excel和C#退出服务器时

我得到以下错误:

System.Runtime.InteropServices.COMException (0x8000401A): Retrieving the COM class factory for component with CLSID {00024500-0000-0000-C000-000000000046} failed due to the following error: 8000401a.

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

回答

5

My service seems to have a problem launching Excel when no one is logged on the server, does anyone have a solution to this.

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

特定的COM错误您收到手段代码:

8000401a : The server process could not be started because the configured identity is incorrect. Check the username and password.

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

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

1

基本上,科迪格雷的答案是正确的。在过去,我需要从Windows服务启动Excel才能打印文件。

我们能够通过将服务设置为以特定用户帐户运行并且不时通过该用户帐户登录并尝试启动无法看到错误消息的文件由Excel弹出。

就你而言,这可能是因为Excel第一次启动,它会要求你输入类似你的首字母缩写。

1

您是否使用Office Automation启动Excel?很抱歉,服务流程不支持Office自动化。它被设计为仅在交互式过程中工作。

如果幸运的话,从服务进程中使用Office Automation将不起作用。如果你不幸运,它会出现工作,你会真正把你的应用程序投入生产。然后你会开始发现很难重现的随机错误,如果不破坏别的东西就更难修复。

这将是由于真正的错误是设计错误 - 您从服务进程中使用了Office自动化。

把它从经验之声......

相关问题