Windows ベースのサーバーに Service Pack、更新プログラムのロールアップ、またはプリンター修正プログラムをインストールした後、ユーザーは印刷できません

この記事では、サービス パックまたはプリンター修正プログラムをサーバーにインストールした後に印刷できない問題を解決するためのヘルプを提供します。

適用対象: Windows Server 2012 R2
元の KB 番号: 832219

現象

Windows Server 上の Unidrvui.dll ファイルを更新するサービス パック、更新プログラムのロールアップ、または修正プログラムをインストールすると、次の両方の現象が発生する可能性があります。

  • クライアントまたはサーバーが印刷しようとすると、印刷スプーラー サービスが応答を停止 (または "ハング") しているように見え、次のエラー メッセージが表示されます。

    印刷ジョブを作成できません。

  • サーバー コンソールからテスト ページを印刷しようとすると、次のエラー メッセージが表示されます。

    テスト ページの印刷に失敗しました。

  • [ドライバーの追加] ウィザードまたは [プリンターの追加] ウィザードは、デバイスとプリンターを使用してドライバーをインストールしようとしたとき、または印刷管理コンソールを使用して、応答を停止します。

原因

この動作は、多数の Unidrv ベースのプリンター制御言語 (PCL) プリンター ドライバーを持つサーバーに Service Pack または修正プログラム パッケージをインストールする場合に発生する可能性があります。

多数の Unidrv ベースの PCL プリンター ドライバーを持つサーバーに Unidrvui.dll 更新するサービス パックまたは修正プログラム ファイルをインストールすると、これらのドライバーのスプーラー効率を向上させるために使用される解析済みのバイナリ プリンター記述ファイル (.bud ファイル) の再生成に長時間 (最大 2 時間) かかる場合があります。 この間、印刷スプーラーは受信印刷ジョブを受け取ることができず、印刷キューがいっぱいであることを示すメッセージをクライアントに返す場合があります。 これは 1 回限りの解析操作であり、解析されたバイナリ .bud ファイルが正常に再生成された後は発生しません。

汎用プリンター記述 (GPD) ファイルから生成されたバイナリ .bud ファイルは、GPD パーサー ファイルのバージョンが変更されているため、再生成する必要があります。 すべての Unidrv ベースの PCL ドライバーが解析されると、スプーラーは再び印刷ジョブを受け取ることができます。 このため、Microsoft では、この最大 2 時間の .bud ファイル コンパイルに対応するために、多数の Unidrv ベースの PCL プリンター ドライバーを使用するサーバーにサービス パックと修正プログラムのインストールをスケジュールすることをお勧めします。

解決方法

この問題を解決するには、アップグレードされたドライバー ファイルごとに、すべての 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」と入力し、[OK] をクリックします。

    2. 次のレジストリ サブキーを見つけてクリックします。
      HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Print

    3. [レジストリ] メニューの [レジストリ ファイルのエクスポート] をクリックします。

    4. [ ファイル名 ] ボックスに 「printkey」と入力し、[ 保存] をクリックします。

      注:

      後で Print レジストリ キーを復元する必要がある場合は、保存した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 ファイルは、この動作をトリガーすることもできます。