即使启用了假脱机文件池,如何找到具有给定ID的作业的假脱机文件?

Law*_*ton 17 c# windows print-spooler-api

我想将给定Windows打印作业的假脱机数据复制到磁盘上的任意位置.

我有Print Spooler API的打印作业的作业ID .我知道这个工作已经完成了假脱机.我知道在我有时间完成我需要做的任何工作之前,工作不会被删除.

如果禁用文件池,我可以通过在假脱机目录中查找格式为"xxxxx.spl"的文件来执行此操作,其中xxxxx是0填充的作业ID.

如果启用了文件池,我该怎么做?

如果有一个方法获取了作业ID并返回了一个假脱机数据流,我会很高兴,但这似乎不太可能.假设使用OpenPrinter"PrinterName,Job xxxx"和ReadPrinter 可能会有类似的东西,如此处所述,但到目前为止我还没有能够使它工作,即使我这样做,看起来它将数据加载到内存中,我不确定这对大型假脱机文件有何影响(> 1 GB并不罕见).

我的第二个偏好是传递ID并使用磁盘上的假脱机数据取回文件的位置(无论文件池设置如何).

我的第三个偏好是将池文件("FPyyyyy.spl")映射到它的作业ID.

这些都是可行的,还是有人对如何解决这个问题有更好的了解?

(编辑补充,因为它是不明确的,我们都知道这个选项):我们的底牌是要求我们的客户通过编辑每台打印机的设置注册表禁用后台打印文件池,但我们更希望避免这种情况.

Law*_*ton 8

弄清楚为什么我的调用OpenPrinter失败并且我已成功使用OpenPrinter和读取假脱机数据ReadPrinter,这很好地解决了我们的问题.

不过,我还是会给那些想出更好解决方案的人奖励.