Windows services ActiveReports 7从Windows服务引发无效句柄异常打印

Windows services ActiveReports 7从Windows服务引发无效句柄异常打印,windows-services,activereports,Windows Services,Activereports,我有一个在Server2008上作为windows服务运行的应用程序。当我将其作为应用程序运行并发送打印作业时,打印作业得到成功处理。但是,如果改为将打印作业发送到windows服务,则会引发“句柄无效”异常 以下是错误: Printing Thread error: The handle is invalid. StackTrace: at System.Drawing.Printing.StandardPrintController.OnStartPrint(PrintDocument

我有一个在Server2008上作为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()
打印线程错误:句柄无效。StackTrace:at System.Drawing.Printing.StandardPrintController.OnStartPrint(PrintDocument文档,PrintEventArgs e)at System.Drawing.Printing.PrintController.Print(PrintDocument文档)at System.Drawing.Printing.PrintDocument.Print()at GrapeCity.ActiveReports.Viewer.Win.Printing.PrintImpl.DocumentPrinter.b_1e()中的
该服务正在具有管理员权限的管理员帐户下运行

任何帮助都将不胜感激

Roussul


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

可以检查以下事项:

  • 确保运行服务的用户帐户在其帐户下安装了正确的打印机,并将其设置为默认打印机
  • 确保在ActiveReports中使用的Print方法不会显式显示任何UI
  • 尝试从服务控制面板小程序中选中服务属性页上的“允许服务与桌面交互”复选框。虽然您可能没有显示任何UI,但打印机驱动程序可能需要该功能
  • 最后,请记住,一般来说,从Windows服务打印是有点不稳定的。甚至有以下免责声明:

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


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

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

    打印功能似乎试图连接到32位驱动程序,而不是安装的64位驱动程序


    可能在.NET Windows应用程序中,“目标CPU”设置也会导致类似问题?ie如果你以x86为目标,并尝试在x64上运行你的应用程序,它将只连接到32位打印机驱动程序?

    这不是打印机访问问题,因为我在WinXP而不是2k8上运行该服务,并且该服务正在工作。上述任何一项都不起作用。我唯一没有尝试的是在管理员帐户上启用桌面交互。本地系统帐户对打印机和服务本身都没有权限。我不知道如何在“登录帐户”上启用它!尝试在不使用AR的情况下使用System.Drawing.printing打印,看看会发生什么。如果您在Microsoft托管的支持线程上收到类似的错误帖子,请查看他们是否可以提供帮助。您还可以检查不同的打印机驱动程序,看看它是否是特定于驱动程序的。