0

我们有一个 WCF 服务,它从模板生成 Excel 文件,并以字节数组的形式将其反馈给客户端。出于某种原因,当我们尝试执行此操作时出现错误:

sheet.PageSetup.CenterHeader = sheet.PageSetup.CenterHeader.Replace("[customerName]", customerName).Replace("[dateTime]", date.ToShortDateString());

当它到达这一行时,我们会收到以下错误消息:

No printers are installed. To install a printer:
In Microsoft Windows 2000, click Start, point to Settings, and then click Printers. Double-click Add Printer.
In Microsoft Windows XP, click Start, and then click Printers and Faxes. Under Printer Tasks, click Add a printer.
Follow the instructions in the wizard.

该服务在 LocalSystem 帐户下运行。当我们第一次部署这个服务时,它是在一台 x64 机器上并且有同样的问题。我们的开发环境是 x86,所以我们将服务移到了另一台 x86 的服务器上,它运行了一段时间。它最近停止工作,现在再次给我们这个错误消息。我很确定这是因为最近在应用服务器上完成了大规模 Windows 更新。

有趣的是,我尝试将服务更改为“允许与桌面交互”,但没有成功,但是当我们的系统管理员做同样的事情时,它只生成了一个文件,但现在不起作用。

机器上安装了打印机,包括域帐户和本地帐户。我也尝试在不同的帐户下运行该服务,但由于某些 SSPI 错误,我无法连接到该服务。我们尝试使用网络服务帐户,但应用程序根本看不到该服务。每次更改后我们都重新启动了服务,但也无济于事。

我对工作表对象的“PageSetup”部分的了解是,即使您不打印,它也需要安装打印机才能访问它。我想不出办法让机器认为 LocalSystem 帐户安装了打印机。

4

1 回答 1

0

我们发现了问题,我的配置文件仍然指向 x64 服务器:(

至于为什么它不能在 x64 上工作(据我所知)——因为 office 2003 是 x86,它需要一个 x86 打印后台处理程序才能正常工作。我不知道有什么方法可以在 x64 操作系统上获得 x86 打印假脱机程序,所以我们只是将它固定在 x86 服务器上。

于 2010-05-07T17:00:42.530 回答