ロックされているプリンタースプールシャドウファイル(.shd)を開くヘルプが必要です

StackOverflow https://stackoverflow.com/questions/7340882

  •  27-10-2019
  •  | 
  •  

質問

Windows Print Spooling Directory「C: Windows System32 Spool Printers」内にあるShadowファイル(.shd)内の情報に興味があります。印刷ジョブが開始されるたびに、そのディレクトリにスプールファイル(.SPL)とシャドウファイル(.shd)が作成されます。これまでのところ、印刷ジョブがいつ開始されたかを検出することに成功しており、その印刷ジョブを一時停止することができました。ジョブを一時停止しないと、ファイルは最終的にプリンターに向かい、Windowsによって削除されます。

私の問題はです。 .shdファイルは、スプリントスプーラーが開いている間に読めないようにロックされているため、.shdファイルを開くことができません。 Windows Explorerのファイルにアクセスして、ファイルを別のファイルにコピーするだけでも、それも機能しませんでした。私が開くことができる.splスプールファイル。私は単に待つだけで、スプーラーがそのファイルをかなり迅速にリリースします。ただし、Shadowファイルの場合、このファイルを永久に保持します。残念ながら、それは私が必要とするものです。

ファイルを開くために特に使用しているコードの行は次のとおりです。

m_spoolJobStream = new FileStream(spoolFilePath, FileMode.Open, FileAccess.Read, FileShare.ReadWrite);

私が得るioxceptionは次のとおりです。

このプロセスは、ファイル 'c: windows system32 spool printers fp00083.shd'にアクセスできません。これは、別のプロセスで使用されているためです。

したがって、はい、それは別のプロセスで使用されています。ウィンドウのプリントスプーラーサービスで使用されています。しかし、私はそれについてできることは何もないと思います。私がやりたいのはファイルを読むことだけです。変更を加えたくありません。ここでできることはありますか、それともねじ込まれただけですか?

役に立ちましたか?

解決 2

まあ、私はこの問題を回避する方法を見つけられませんでした。私はこれに対する解決策がなく、それは設計によるものだと思います。しかし、私は自分が望む情報を取得する別の方法を見つけました(少なくともこれはこれまでのようです)。

winspool.drvライブラリからfindnextprinterchangenotification()ルーチンを使用しています。この男は、printer_notify_info構造へのポインターを返します。これには、printer_notify_info_data構造の配列が含まれています。その配列内には、「job_notify_field_devmode」とマークされた「フィールド」メンバーの要素があります。この要素には、devmodeのかなり大きな構造が含まれています。構造はここでM $で説明されています http://msdn.microsoft.com/en-us/library/dd183565%28 = vs.85%29.aspx 。この構造には、私が探しているものが含まれているように見え、とにかくこのページに従って.shdファイルに包まれているようです http://www.undocprint.org/formats/winspool/shd. 。その.shdファイルに他に何があるかを知りたいのですが、仕事が一時停止している間にロックされているため、まだ開くことができません。ジョブが完了するまでロックされたままにしているのではないかと思います。まあ、とにかく私の新しいソリューションはよりエレガントだと思います。

他のヒント

オプションを確認してください: "印刷されたドキュメントを保管してください「(HPプリンターがある場合)、Spoolファイルフォルダーを表示すると、Shadow FilesとSpoolファイルの両方があります。

enter image description here

ボックスとサーバーの両方のスプールでジョブを一時停止するようにしてください。そうすれば、SPLファイルと同じようにSHDファイルをコピー/開き/移動できるはずです。とにかく私のために働いた...

これは私にとってはうまくいきます:
- プリンターを掛けてください(例:紙を詰めます)
- 作成されている.shdおよび.splを印刷して観察します
- プリントスプーラーを停止します
- ファイルを開きます

問題は、fileshare.readwriteパラメーターです。ファイルに読み書きを求めているので、エラーが発生したのかもしれません。読み取り専用の許可を求めてみてください。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top