activeports 7抛出从Windows Service打印的无效句柄异常



我有一个在Server 2008上作为windows服务运行的应用程序。当我将其作为应用程序运行并发送打印作业时,打印作业得到了成功处理。但是,如果我将打印作业发送给windows服务,它会抛出"句柄无效"异常。

错误如下:

Printing Thread error: The handle is invalid. StackTrace:    at System.Drawing.Printing.StandardPrintController.OnStartPrint(PrintDocument document, PrintEventArgs e)   at System.Drawing.Printing.PrintController.Print(PrintDocument document)   at System.Drawing.Printing.PrintDocument.Print()   at GrapeCity.ActiveReports.Viewer.Win.Printing.PrintImpl.DocumentPrinter.<Print>b__1e()

该服务在具有管理员权限的管理员帐户下运行。

任何帮助将不胜感激!

检查以下几点:

  1. 确保运行服务的用户帐户在其帐户下安装了正确的打印机,并将其设置为默认打印机。
  2. 确保你在ActiveReports中使用的Print方法明确地不显示任何UI。
  3. 尝试在服务控制面板小程序的服务属性页上选中"允许服务与桌面交互"复选框。虽然您可能没有显示任何UI,但打印机驱动程序可能需要该功能。

最后,请记住,一般来说,从Windows服务中打印是有点不稳定的。甚至微软的System.Drawing.Printing文档也有以下免责声明:

System.Drawing.Printing命名空间中的类不支持在Windows服务或ASP中使用。. NET应用程序或服务。尝试在这些应用程序类型之一中使用这些类可能会产生意想不到的问题,例如服务性能下降和运行时异常。

这并不意味着它不能工作,但它很容易出错,微软不想在这种情况下帮助我们打印。我怀疑这是因为制造商的打印机驱动程序不一定是为从非ui进程(如windows服务)打印而设计的。

Roussul

可能是权限或打印机访问问题。要检查它是否与ActiveReports相关,你是否可以创建一个单独的应用程序,实现system.printing.drawing并将其作为服务运行,就像你在ActiveReports中那样,并让我们知道

我在一个ASP中遇到过这个问题。网络应用程序。根本原因是网站运行的IIS应用程序池中设置了"启用32位应用程序"。

打印函数似乎试图连接到32位驱动程序,而不是已安装的64位驱动程序。

也许在。net Windows应用程序的"目标CPU"设置也可能导致类似的问题?也就是说,如果你的目标是x86,并尝试在x64上运行你的应用程序,它只会连接到32位打印机驱动程序?

相关内容

  • 没有找到相关文章

最新更新