c# - ¿Cómo puedo encontrar el archivo de spool para el trabajo con una ID determinada incluso cuando la agrupación de archivos de spool está habilitada?
windows print-spooler-api (2)
Me gustaría copiar los datos de spool para un trabajo de impresión de Windows determinado en una ubicación arbitraria en el disco.
Tengo el ID de trabajo del trabajo de impresión de la API de cola de impresión . Sé que este trabajo ha terminado de poner en cola. Sé que el trabajo no se eliminará antes de que tenga tiempo de completar lo que necesito hacer.
Si la agrupación de archivos está deshabilitada, puedo hacer esto buscando en el directorio de spool el archivo con formato "xxxxx.spl", donde xxxxx es el ID de trabajo con relleno 0.
¿Cómo puedo hacer esto si la agrupación de archivos está habilitada?
Me encantaría que hubiera un método que tomara una ID de trabajo y devolviera un flujo de datos de la cola, pero parece poco probable en este momento. Supuestamente, algo similar podría ser posible utilizando OpenPrinter
con "PrinterName, Job xxxx" y ReadPrinter como se documenta aquí , pero hasta ahora no he podido hacer que funcione , e incluso si lo hago parece que carga los datos en la memoria , y no estoy seguro de cómo funcionará esto con archivos de gran tamaño (> 1 GB no es inusual).
Mi segunda preferencia sería una forma de pasar la ID y recuperar la ubicación del archivo con los datos de la cola en el disco (independientemente de la configuración de agrupación de archivos).
Mi tercera preferencia sería una forma de asignar un archivo agrupado ("FPyyyyy.spl") al ID de trabajo para el que está.
¿Alguno de estos es factible, o alguien tiene una mejor idea sobre cómo resolver este problema?
(Editado para agregar, ya que no estaba claro que conociéramos esta opción): nuestra alternativa es exigir que nuestros clientes deshabiliten la agrupación de archivos en spool mediante la edición del registro de cada impresora, pero preferiríamos evitar esto.
¿Has leído esto?
http://www.undocprint.org/winspool/spool_files
Parece tener todo lo que necesitas :)
Específicamente To Turn Off Spool File Pooling on a Per Printer Queue-Basis
También hay este artículo sobre el formato de los archivos de spool http://www.codeproject.com/Articles/9720/The-Windows-NT-print-spool-shadow-file-format pero parece que ya conoce el formato y probablemente no será de ninguna ayuda.
Descubrí por qué mis llamadas a OpenPrinter
estaban fallando y he leído con éxito los datos de la cola de OpenPrinter
utilizando OpenPrinter
y ReadPrinter
, lo que soluciona muy bien nuestro problema.
Sin embargo, todavía otorgaré la recompensa a cualquiera que encuentre una mejor solución.