在基于 Windows 的服务器上安装 Service Pack、更新汇总或打印机修补程序后,用户无法打印

本文有助于解决在服务器上安装 Service Pack 或打印机修补程序后无法打印的问题。

原始 KB 数: 832219

现象

在 Windows Server 上安装 Service Pack、更新汇总或更新Unidrvui.dll文件的修补程序后,用户可能会遇到以下两种症状:

  • 当客户端或服务器尝试打印时,打印后台处理程序服务会显示停止响应(或“挂起”),并显示以下错误消息:

    无法创建打印作业。

  • 尝试从服务器控制台打印测试页时,会收到以下错误消息:

    测试页无法打印。

  • 当你尝试使用设备和打印机或打印管理控制台安装驱动程序时,添加驱动程序或添加打印机向导将停止响应。

原因

如果在具有许多基于 Unidrv 的打印机控制语言(PCL)打印机驱动程序的服务器上安装 Service Pack 或修补程序包,则可能会出现此行为。

在安装了更新具有许多基于 Unidrv 的 PCL 打印机驱动程序的服务器上Unidrvui.dll的服务包或修补程序文件时,服务器可能需要很长时间(最多 2 小时)重新生成用于提高这些驱动程序的后台处理程序效率的已分析二进制打印机说明文件(.bud 文件)。 在此期间,打印后台处理程序无法接收传入的打印作业,并且可能会将消息返回到指示打印队列已满的客户端。 这是一次性分析操作,在成功重新生成已分析的二进制 .bud 文件后不会发生。

必须重新生成从通用打印机说明 (GPD) 文件生成的二进制 .bud 文件,因为 GPD 分析程序文件版本已更改。 分析所有基于 Unidrv 的 PCL 驱动程序后,后台处理程序可以再次接收打印作业。 因此,Microsoft建议在具有许多基于 Unidrv 的 PCL 打印机驱动程序的服务器上计划 Service Pack 和修补程序安装,以适应此长达两小时的 .bud 文件编译。

解决方法

若要解决此问题,请安排足够的时间让服务器完成每个升级驱动程序文件的所有基于 Unidrv 的打印机驱动程序分析,然后为每个使用这些文件的打印机安排足够的时间。

解决方法

重要

此部分(或称方法或任务)介绍了修改注册表的步骤。 但是,注册表修改不当可能会出现严重问题。 因此,按以下步骤操作时请务必谨慎。 作为额外保护措施,请在修改注册表之前先将其备份。 如果之后出现问题,您就可以还原注册表。 有关如何备份和还原注册表的详细信息,请参阅:如何备份和还原 Windows 中的注册表

如果无法等待服务器完成所有基于 Unidrv 的打印机驱动程序分析,请手动删除所有缓存的二进制打印机说明文件(.bud 文件),然后自动重新创建它们。 根据服务器的速度,这种自动重新创建可能在较短时间内完成。 通常,此操作在 30 分钟内完成。

注意

打印后台处理程序启动时,它将安装较新版本的 Unidrv.dll。 因此,.bud 文件已过期。 .bud 文件是 .ppd 文件的已编译版本,可以从这些 .ppd 文件完全重新生成。 因此,可以删除 .bud 文件。

为此,请按照下列步骤进行操作:

  1. 停止打印后台处理程序服务。 为此,请从命令提示符运行以下命令:

    net stop spooler
    
  2. 搜索所有 .bud 文件,并确保它们已标记当前时间和日期。 这些文件与今天的日期一起显示。

  3. 删除具有当前日期之前的日期和时间戳的所有 .bud 文件。 这些文件位于下面的文件夹中:

    %SYSTEMROOT%\System32\Spool\Drivers\w32x86\3

  4. 如果存在,请删除以下注册表项:
    HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Print\PostSPUpgrade

    为此,请按照下列步骤进行操作:

    1. 单击“开始”,单击“运行“打开”框中键入 regedit,然后单击“确定”。

    2. 找到,然后单击以下注册表子项:
      HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Print

    3. 在“注册表”菜单上,单击“导出注册表文件”

    4. “文件名 ”框中,键入 printkey,然后单击“ 保存”。

      注意

      如果以后必须还原 打印 注册表项,可以通过双击保存Printkey.reg文件来执行此操作。

    5. 找到,然后单击以下注册表子项(如果存在):
      HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Print\PostSPUpgrade

    6. “编辑”菜单上,单击“删除,然后单击“是以确认删除 PostSPUpgrade 注册表项。

      注意

      重启计算机后,PostSPUpgrade 注册表项可能会再次出现。 如果其他尚未分析的 .bud 文件存在,则会发生此行为。 分析这些文件后,会自动删除此注册表项。

  5. 重新启动服务器。

重启服务器后,大约 30 分钟后,用户可以使用打印功能。

详细信息

在 .NET Framework 3.0 中,unidrv.dll文件现在包含在 XPS 打印中。 unidrv.dll文件还可以触发此行为。