我有一个后台进程,它是一个.NET Executable,它在没有STAThread属性的情况下运行。它不是一个Windows服务。此可执行文件旨在作为后台进程运行,无需任何用户交互。
此后台进程轮询数据库表,查找可能必须分派给连接到计算机的打印机的作业。
我使用了C#PrintServer
(MSDN)类的实例。我创建了一个打印服务器实例,获取了对用户输入指定的队列的引用,然后使用PrintQueue.AddJob
()(MSDN)添加了一个作业。然后我调用PrintServer.Commit()
函数调用。这适用于几乎所有"真实"打印机。当谈到文档打印机,如XPS,Adobe PDF等,或者真正的"之后弹出另一个对话框的打印机,不显示该对话框。
这是我的问题。不显示额外的对话框。这意味着打印作业永远不会完成。但是,当我对常规控制台程序使用相同的事件序列时,没有麻烦......打印机驱动程序向用户显示对话框。请注意,这个问题主要见于"虚拟"或文档打印机,但在我的测试中,我发现弹出另一个对话框的打印机也容易出现这个问题。
虽然我目前在允许用户打印到特定打印机之前通过验证过程来解决问题,但仍然存在丢失对话框的问题。
我已经在Stackoverflow和Microsoft社区论坛上查看了如何检测文档/软件打印机的问题。但是,它们都列出了检测打印机是否为虚拟的列表。我发现不再有任何可靠的消防方式来区分虚拟/文档打印机和物理/真实打印机。
感谢任何帮助。
谢谢!