我在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()
该服务在具有管理员权限的管理员帐户下运行。
任何帮助将不胜感激!
答案 0 :(得分:1)
Roussul
可能是权限或打印机访问问题。要检查它是否与ActiveReports相关,您是否可以创建一个单独的应用程序,实现system.printing.drawing并将其作为服务运行,就像使用ActiveReports一样,并告诉我们。
答案 1 :(得分:1)
要检查的事情:
最后,请记住,一般来说,从Windows服务打印有点不稳定。即使Microsoft's documentation for System.Drawing.Printing也有以下免责声明:
不支持在Windows服务或ASP.NET应用程序或服务中使用System.Drawing.Printing命名空间中的类。尝试在其中一种应用程序类型中使用这些类可能会产生意外问题,例如服务性能下降和运行时异常。
这并不意味着它不起作用,但它容易出错,以至于微软不希望在这种情况下帮助我们打印。我怀疑这是因为来自制造商的打印机驱动程序不一定是为非UI流程(如Windows服务)打印而设计的。
答案 2 :(得分:1)
我在ASP.NET应用程序中遇到过这个问题。根本原因是在网站运行的IIS应用程序池中设置了“启用32位应用程序”。
打印功能似乎试图连接到32位驱动程序而不是已安装的64位驱动程序。
也许在.NET Windows应用程序中,“目标CPU”设置也可能导致类似的问题?即如果您的目标x86并尝试在x64上运行您的应用程序,它将只连接到32位打印机驱动程序?