错误与Excel和C#注销服务器时

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

我得到以下错误:

System.Runtime.InteropServices.COMException(0x8000401A):检索具有CLSID {00024500-0000-0000-C000-000000000046}的组件的COM类工厂失败,原因如下:8000401a。

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

没有人在服务器上login时,我的服务似乎启动Excel时出现问题,有没有人有解决这个问题。

当然有一个问题。 Windows服务无法显示用户界面 ,那么当没有用户login时,如何启动像Microsoft Excel这样的GUI应用程序呢?

您收到的具体的COM错误代码意味着:

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

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

无论如何,这个devise被打破了:Excel并没有被devise成从Windows服务运行。 创build一个标准的Windows应用程序。 如果您需要在没有自己的UI的情况下在后台运行,请不要创build窗口。

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

通过将服务设置为特定的用户帐户并不时地以该用户帐户login并尝试启动无法看到由Excelpopup的错误消息的文件,我们能够克服这种错误。

在你的情况下,这可能是因为Excel是第一次启动,它会要求你input类似你的名字的名字。

您是否使用Office自动化来启动Excel? 对不起,但服务进程不支持Office自动化。 它被devise成仅在交互过程中工作。

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

这是因为真正的bug是一个devise错误 – 您从服务进程中使用了Office Automation。

把它从经验之声…