C# 用户无法看到打印机驱动程序引发的对话框

C# 用户无法看到打印机驱动程序引发的对话框,c#,windows,printers,C#,Windows,Printers,我有一个后台进程,它是一个.NET可执行文件,运行时没有STAThread属性。它不是windows服务。此可执行文件旨在作为后台进程运行,无需任何用户交互 此后台进程轮询数据库表,查找它可能必须分派给连接到计算机的打印机的作业 我使用C#PrintServer类的一个实例。我创建了打印服务器的一个实例,获取对用户输入指定的队列的引用,然后使用PrintQueue.AddJob()添加一个作业。然后调用PrintServer.Commit()函数调用。这适用于几乎所有的“真实”打印机。当涉及到X

我有一个后台进程,它是一个.NET可执行文件,运行时没有STAThread属性。它不是windows服务。此可执行文件旨在作为后台进程运行,无需任何用户交互

此后台进程轮询数据库表,查找它可能必须分派给连接到计算机的打印机的作业

我使用C#
PrintServer
类的一个实例。我创建了打印服务器的一个实例,获取对用户输入指定的队列的引用,然后使用
PrintQueue.AddJob
()添加一个作业。然后调用
PrintServer.Commit()
函数调用。这适用于几乎所有的“真实”打印机。当涉及到XPS、Adobe PDF等文档打印机或“真实”打印机(之后会弹出一个附加对话框)时,不会显示此对话框

这是我的问题。不显示额外的对话框。这意味着打印作业永远不会完成。但是,当我对常规控制台程序使用相同的事件序列时,没有任何麻烦。。打印机驱动程序向用户显示该对话框。请注意,这个问题主要出现在“虚拟”或文档打印机上,但是在我的测试中,我发现弹出额外对话框的打印机也容易出现这个问题

虽然我目前在允许用户打印到特定打印机之前通过验证过程来避免这个问题,但缺少对话框的问题仍然存在

我已经研究了有关如何在Stackoverflow和Microsoft社区论坛上检测文档/软件打印机的问题。但是,它们都列出了检测打印机是否为虚拟打印机的列表。我发现不再有任何可靠的方法来区分虚拟/文档打印机和物理/真实打印机

感谢您的帮助


谢谢

“一个运行时没有STAThread属性的.NET可执行文件”-为什么?您的问题几乎肯定是缺少
STAThread
属性,请参阅我的测试控制台程序在没有STAThread属性的情况下运行。显示的对话框没有问题。