【发布时间】:2018-08-21 15:01:00
【问题描述】:
我想将给定 Windows 打印作业的假脱机数据复制到磁盘上的任意位置。
我有来自Print Spooler API 的打印作业的作业 ID。我知道这项工作已经完成了假脱机。我知道在我有时间完成我需要做的任何事情之前,该工作不会被删除。
如果文件池被禁用,我可以通过在假脱机目录中查找格式为“xxxxx.spl”的文件来执行此操作,其中 xxxxx 是填充为 0 的作业 ID。
如果启用了文件池,我该怎么做?
如果有一种方法可以获取作业 ID 并返回假脱机数据流,我会很高兴,但目前这似乎不太可能。据推测,使用OpenPrinter 和“PrinterName,Job xxxx”和 ReadPrinter 可能会发生类似的事情,如文档中的here,但到目前为止我haven't been able to get it to work,即使我这样做,它看起来也将数据加载到内存中,我'不确定这将如何处理大型假脱机文件(>1 GB 并不罕见)。
我的第二个偏好是传入 ID 并通过磁盘上的假脱机数据取回文件的位置(无论文件池设置如何)。
我的第三个偏好是将池文件(“FPyyyyy.spl”)映射到它的作业 ID。
这些是否可行,或者是否有人对如何解决这个问题有更好的想法?
(编辑添加,因为不清楚我们是否知道此选项): 我们的后备方案是要求我们的客户通过编辑每台打印机的注册表来禁用假脱机文件池,但我们更希望避免这种情况。
【问题讨论】:
-
嗨,“你怎么知道在你有时间完成你需要做的任何事情之前,工作不会被删除。”?如何保留假脱机文件?
标签: c# windows print-spooler-api