web-dev-qa-db-ja.com

プリントサーバーの印刷キューでジョブがスタックする

約20台のプリンタのプリントサーバーとして機能するServer 2003マシンがあります。問題のあるプリンターが1台あり、キューに104のドキュメントがあります。

「すべてのドキュメントのキャンセル」を試み、個々のドキュメントを手動でキャンセルしようとしましたが、成功しませんでした。

印刷ジョブのステータスは「削除中-プリンターに送信しました」と表示されます。約2時間この状態です。

他のプリンターに影響を与えずにスプールを再起動するオプションはないと思います。特定の非Windows印刷対応アプリケーション用のホールドプリンターがあり、ジョブを失うことはありません。

3
Carl

印刷スプーラーを再起動しても、通常、印刷ジョブはドロップされず、新しいジョブの受け入れが停止するだけです。エンドユーザーは気づくでしょうが、印刷ジョブを静かにドロップするほど悪くはありません。一般に、その場でサービスを再起動しても安全です。

さらに重要なことに、私はこれをあなたと共有したかった:

ときどき、プリンタキューで破損した印刷ジョブが発生しました。私が気づいたそれらの場合

a。破損した印刷ジョブが存在し、ターゲットプリンターがオンである限り、印刷スプーラーは起動したままになりません
b。スプーラーが停止している場合、印刷スプーラーではGUIから破損したジョブを削除できません
c。破損したジョブが完了するか削除されるまで、プリンターは他のジョブを印刷しません。

これを修正するには、

  1. プリンタを物理的にオフにする
  2. 印刷スプーラーを起動/再起動します
  3. 破損した印刷ジョブを削除する
  4. プリンターの電源を入れます

正確にその順序で1〜4を行わないと、a-cとの無限ループの戦いに陥ります。

あなたの状況がこの経験と一致することをお約束することはできませんが、観察された動作と、印刷/印刷スプーリングのプロセスがどのように物事を引き継ぐかに影響を考慮することは価値があると思います。

編集:反対に、スプールファイルのEvanの操作を理解してください。 Windowsの印刷キュー(開始-設定-プリンターまたは開始-プリンター)を使用し、[ドキュメント]メニューの[キャンセル]オプションを使用して、印刷キューからジョブを削除できます。

キーはそれを扱う彼の方法にありますスプーラーを開始する必要がある私の方法でそれを扱うにはスプールサービスを停止する必要があります。プリンターに物理的にアクセスでき、オフにすると便利な場合は、私の方法を使用できます。物理プリンターにアクセスできない場合は、彼の方法を使用できます。

0
pplrppl

スプーラーサービスのバウンスは、私が知っている唯一の実行可能な選択肢です。私の経験では、一部のジョブはキューで「非常に」詰まり、スプーラーサーバーを停止し、%SystemRoot%\ System32\Spool\Printersフォルダーからジョブを表すファイルをクリアして、再起動する必要がありますスプーラサービス。

スプーラーサービスをバウンスすることで、他のプリンターのキューに既に入っているジョブを失うことはありません(これを別のサーバーまたはクライアントで自分でデモンストレーションできます-プリンターを一時停止し、いくつかのジョブをキューに入れ、停止/再起動しますただし、スプールディレクトリからジョブファイルを削除する必要がある場合は、保持する予定のジョブの他のスプールファイルの中でそれらを見つけるのは困難です。

(余談ですが、Microsoftは、印刷スプーラーサービスIMOのlotを実行して、このような状況を緩和できます。印刷スプーラーWindowsの最近のいくつかのリリース全体で、サービスはほとんど強化されていない状態で衰退しています。印刷は魅力的ではありませんが、多くの場合、ビジネスに不可欠です。)

編集:

各印刷ジョブは、スプールディレクトリで ".SPL"ファイル(EMFまたはraw形式の印刷ジョブデータを含む))と、 "header"を含む一致する ".SHD"ファイルで表されます。ジョブに関する情報このヘッダー情報ファイルには、ジョブの送信先のプリンターに関する詳細が含まれています。

特定の印刷ジョブの「SPL」ファイルと「SHD」ファイルの一致するペアを削除すると、そのジョブが効果的に削除されます。

残念ながら、「。SHD」ファイルの形式は公式には文書化されていません(リバースエンジニアリングされたドキュメントについては http://www.undocprint.org/formats/winspool/shd を参照してください)。スプールディレクトリにある「ファイル」であり、「破損した」印刷ジョブのみを削除することは、せいぜい非常に困難です。私が見ることができるものから、宛先の印刷キュー名は、その「SHD」ファイルにコード化されていない文字列として含まれているため、コマンドラインツールの行「strings」と「findstr」を使用してスクリプトをまとめることができると思いますすべての「.SHD」ファイルを使用して、「問題のある」プリンター宛のジョブを見つけ、それらを削除し、他のプリンターにバインドされたジョブはそのままにしておきます。

スプールファイルの実行中はファイルがロックされるため、スプールファイルの操作は、スプーラサービスを停止した状態で行う必要があります。

7
Evan Anderson