我们有一个 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 帐户安装了打印机。