2012-10-12 273 views
17

Me gustaría copiar los datos de spool para un determinado trabajo de impresión de Windows a una ubicación arbitraria en el disco.¿Cómo puedo encontrar el archivo de cola para el trabajo con una ID dada incluso cuando la agrupación de archivos de cola está habilitada?

Tengo la identificación del trabajo de impresión del Print Spooler API. Sé que este trabajo ha terminado de enviarse en spool. Sé que el trabajo no se eliminará antes de que tenga tiempo para completar lo que necesite hacer.

Si la agrupación de archivos está deshabilitada, puedo hacerlo buscando en el directorio de spool el archivo con el formato "xxxxx.spl", donde xxxxx es la ID del trabajo con 0 acolchado.

¿Cómo puedo hacer esto si la agrupación de archivos está habilitada?

Estaría encantado si hubiera un método que tomara una identificación de trabajo y devolviera una secuencia de los datos de la cola, pero eso parece poco probable en este punto. Supuestamente algo similar podría ser posible usando OpenPrinter con "PrinterName, Job xxxx" y ReadPrinter como se documentó here, pero hasta ahora I haven't been able to get it to work, e incluso si lo hago parece que carga los datos en la memoria, y no estoy seguro de cómo esto funcionará con archivos de spool grandes (> 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 spool 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") a la ID del trabajo para el que está.

¿Alguno de estos es factible o alguien tiene una mejor idea sobre cómo resolver este problema? (Modificado para agregar porque no estaba claro que conocíamos esta opción): Nuestra alternativa es exigir que nuestros clientes deshabiliten la agrupación de archivos spool editando el registro para cada impresora, pero preferiríamos evitar esta.

+0

Hola, ¿cómo "sabes que el trabajo no se eliminará antes de que tengas tiempo para completar lo que necesites hacer"? ¿Cómo puedes mantener los archivos de spool? – Kira

Respuesta

8

I figured out por qué mis llamadas a OpenPrinter fallaban y con éxito He leído los datos de cola usando OpenPrinter y ReadPrinter, que resuelve nuestro problema muy bien.

Sin embargo, todavía otorgaré la recompensa a cualquiera que tenga una mejor solución.

1

¿Has leído esto?

http://www.undocprint.org/winspool/spool_files

Parece que tiene todo lo que necesita :)

Específicamente To Turn Off Spool File Pooling on a Per Printer Queue-Basis

Hay también este artículo sobre el formato de los archivos de cola http://www.codeproject.com/Articles/9720/The-Windows-NT-print-spool-shadow-file-format sin embargo, pero parece que ya conoce el formato y probablemente no será de ninguna ayuda.

+0

Sí, he leído esa página. Nos gustaría acceder a los datos de spool sin deshabilitar la agrupación de archivos de spool. Obligar a nuestros clientes a editar el registro para cada impresora que crean (o intentar hacerlo por ellos) es algo que preferiríamos evitar. –

Cuestiones relacionadas