Windows中的打印机通知如何与networking打印机配合使用?

我有一个应用程序需要使用ShellExecute和“打印”动词打印使用相关的应用程序打印不同types的文件。 我的应用程序需要(希望)可靠地知道一个打印作业何时完成处理,并可以发出下一个作业。 我使用FindNextPrinterChangeNotification完成了这一切,使用本地打印机(例如通过USB进行安装)似乎一切正常,但是如果涉及到networking打印机,则会出现完全不同的行为。

我的一个客户使用我的应用程序与networking打印机,意味着一个专业的打印机与自己的打印服务器embedded,安装在Windows Server 2008 R2和共享这个安装的打印机使用Windows到它的客户端。 在这种情况下,FindNextPrinterChangeNotification总是返回成功,但是它返回的结构总是有PRINTER_NOTIFY_INFO_DISCARDED标志。 我可以用自己的Windows Server 2008 R2来重现这种行为,而不是使用自己的embedded式打印机服务器导出打印机,而只是在本地安装的FreePDF XP。 另外,如果我们在我们的一个Ubuntu开发服务器上使用samba,cups和cups-pdf,我会得到相同的行为:Samba成功导出cups-pdf打印机,如果我将它安装在Windows 7开发机器中并与我的打印一起使用应用程序,FindNextPrinterChangeNotification总是成功返回,但总是与标志PRINTER_NOTIFY_INFO_DISCARDED设置。

我的客户之后通过打印机的embedded式打印服务器直接将其打印机安装到客户端,并告诉我,我的打印应用程序现在可以像使用本地打印机一样工作。 意思是没有更多的事件与PRINTER_NOTIFY_INFO_DISCARDED标志设置为我的应用程序的版本,这是一个错误状态,将退出应用程序。

我试图再次使用cups-pdf来重现,这次我没有安装由Samba导出的打印机,而是直接使用URL http://domain.example.org:631/printers/指定打印机的打印机名称PDF 。 我可以在Windows中成功地使用这个打印机,但是我的应用程序再次出现奇怪的事件 这一次我不会得到与标志PRINTER_NOTIFY_INFO_DISCARDED设置的结果,但ppPrinterNotifyInfo总是NULL,我根本没有得到任何结果,但FindNextPrinterChangeNotification成功返回。

微软提供了一个有关防火墙的说明,打印机通知可能会被客户端阻止,但我不认为这是我的情况,因为我已经testing了与禁用的防火墙相同的scheme,启用防火墙结果不同,取决于如何我的开发机器正在对打印机说话,我的Windows 7防火墙设置似乎默认允许打印机通信。

长话短说:对于不同的networking打印机,我没有发现任何可靠的打印机通知。 一切取决于打印机驱动程序? 看起来不是这样的,因为如果Samba导出打印机或者直接使用http,它会有所不同。 从我读过的内容来看,Windows 7使用客户端渲染打印作业,之后将作业发送到networking假脱机程序,我可以在本地假脱机程序中看到这些作业很长时间。 为什么我不收到通知? 是否Samba和打印机共享使用Windows服务器devise不应该发布打印机通知? 我找不到任何信息说。

我真的很感激任何帮助或提示文件,可以提供一些这方面的光。 谢谢!

Solutions Collecting From Web of "Windows中的打印机通知如何与networking打印机配合使用?"