客户端呈现的已知问题
默认情况下,所有驱动程序都启用了客户端呈现,因为它对大多数打印机驱动程序都是透明的,并且为用户提供了明确的好处。 启用此功能后,大多数打印机驱动程序不会遇到任何问题。
但是,如果打印机驱动程序遇到问题,则可以禁用客户端呈现功能,并且打印机驱动程序将在打印服务器上呈现打印作业,就像以前版本的 Windows 操作系统一样。 系统管理员还可以通过使用服务器组策略上的始终呈现打印作业来禁用客户端呈现。
注意
如果禁用客户端呈现功能,打印作业呈现将移动到打印服务器,这可能会对打印服务器性能产生不利影响。
驱动程序包中安装的打印机驱动程序在客户端呈现时不会出现问题。
以下列表描述了客户端呈现的一些已知问题:
如果打印机驱动程序使用自定义打印处理器,但客户端计算机上未安装打印处理器,则会自动禁用客户端呈现。
在某些情况下,在 Point 和 Print 期间,未配置为驱动程序包的打印机驱动程序的打印处理器可能不会安装在客户端计算机上。 如果打印后台处理程序检测到问题,它将禁用该打印队列的客户端呈现。 若要避免此问题,请为打印机驱动程序创建驱动程序包。
如果打印处理器返回错误,则禁用打印队列的客户端呈现。
为打印队列禁用客户端呈现后,打印后台处理程序将使用服务器端呈现重试打印作业。 为打印队列禁用客户端呈现后,打印队列将不再具有任何客户端呈现优势,例如脱机打印。
对于使用非标准配置数据的打印机驱动程序,打印机配置数据可能不完整。
点和打印可能不会传输打印机驱动程序的完整打印机配置数据,这些驱动程序使用专有方法来存储和通信此数据。 可以使用 SetPrinterData 或 SetPrinterDataEx 函数存储打印机配置数据,并使用 GetPrinterData 或 GetPrinterDataEx 函数召回打印机配置数据,从而解决此问题。 有关这些函数的详细信息,请参阅Microsoft Windows SDK文档。
驱动程序不匹配的客户端呈现。
如果客户端计算机的打印机驱动程序版本与服务器不同,则存在打印机驱动程序不匹配的情况。 通常,当发生打印机驱动程序不匹配时,Point 和 Print 会更新客户端计算机上的打印机驱动程序,以匹配服务器上的打印机驱动程序。 在某些情况下,你可能希望客户端计算机上的打印队列使用与打印服务器上的打印机驱动程序版本不匹配的打印驱动程序版本。 例如,你可能不希望 Point 和 Print 更新客户端计算机上的打印机驱动程序:
- 在客户端计算机上运行时,如果打印服务器上的打印机驱动程序存在兼容性问题。
- 减少 Point 和 Print 下载新打印机驱动程序时产生的网络流量。
- 调试或测试时。
可以阻止 Point 和 Print 下载打印机驱动程序,并强制客户端计算机改用已安装在客户端计算机上的最佳驱动程序。 若要选择此行为,请将 HKLM\SYSTEM\CurrentControlSet\Control\Print\PrinterName\PrinterDriverData\DriverPolicy 注册表项的值设置为打印机驱动程序的名称。 将 PrinterName 替换为打印队列的名称,以使用本地可用的打印机驱动程序,而不是打印服务器提供的打印机驱动程序。 在此注册表项中输入的驱动程序名称必须是在客户端计算机上安装或可用于安装的兼容打印机驱动程序的名称。
还可以通过调用 AddPrinterConnection2、设置PRINTER_CONNECTION_MISMATCH标志并在 pConnectionInfo 参数引用的 PRINTER_CONNECTION_INFO_1 结构中指定打印机驱动程序的名称,以编程方式创建打印机驱动程序不匹配的打印机连接。 AddPrinterConnection2 记录在 Windows SDK 文档中。
从 Windows 8 开始,如果注册表中不存在 EMFDespoolingSetting 值并且客户端计算机配置文件为移动平台,则会自动禁用客户端呈现。
如果客户端是移动平台(如笔记本电脑或平板电脑设备),为了节省功耗,当注册表中不存在此值时,后台处理程序会自动禁用客户端呈现。 可以通过调用 SetPrinterData 将打印队列的 EMFDespoolingSetting 值设置为 0,在驱动程序中显式启用移动平台的客户端呈现。
可以使用 msinfo32.exe 确认计算机是配置为移动配置文件还是桌面配置文件:
如果在测试期间检测到客户端呈现功能可能导致的打印机驱动程序问题,则可以禁用驱动程序的客户端呈现。 可以通过调用 SetPrinterData 将打印队列的 EMFDespoolingSetting 值设置为 1,在驱动程序中禁用客户端呈现。 此值会导致连接到打印队列的任何客户端在服务器上呈现打印作业。