2012-10-12 12 views
17

Vorrei copiare i dati di spooling per un dato lavoro di stampa di Windows in una posizione arbitraria su disco.Come trovo il file di spool per il lavoro con un dato ID anche quando è abilitato il pooling di file di spool?

Ho l'ID del lavoro di stampa da Print Spooler API. So che questo lavoro ha finito lo spooling. So che il lavoro non sarà cancellato prima che abbia il tempo di completare tutto ciò che devo fare.

Se il pool di file è disabilitato, è possibile farlo osservando nella directory di spool il file con il formato "xxxxx.spl", dove xxxxx è l'ID del processo con 0 inserito.

Come posso fare se il pool di file è abilitato?

Sarei lieto se ci fosse un metodo che ha preso un ID lavoro e restituito un flusso dei dati di spool, ma a questo punto sembra improbabile. Presumibilmente qualcosa di simile potrebbe essere possibile usando OpenPrinter con "PrinterName, Job xxxx" e ReadPrinter come documentato here, ma finora I haven't been able to get it to work, e anche se lo faccio sembra che carichi i dati in memoria, e non sono sicuro di come questo funzionerà con file di spool di grandi dimensioni (> 1 GB non è insolito).

La mia seconda preferenza sarebbe un modo per passare l'ID e recuperare la posizione del file con i dati di spool sul disco (indipendentemente dall'impostazione del pool di file).

La mia terza preferenza sarebbe un modo per mappare un file raggruppato ("FPyyyyy.spl") all'ID lavoro per cui è.

Alcuni di questi sono fattibili o qualcuno ha un'idea migliore su come risolvere questo problema?

(A cura di aggiungere in quanto non era chiaro che eravamo consapevoli di questa opzione): nostro fallback è quello di richiedere che i nostri clienti disattivare spool file di messa in comune modificando il Registro di sistema per ogni stampante, ma ci sarebbe molto preferisce evitare di Questo.

+0

Ciao, come fai "sai che il lavoro non sarà cancellato prima che tu abbia il tempo di completare tutto ciò che devi fare".? Come puoi mantenere i file di spool? – Kira

risposta

8

ho figured out perché le mie chiamate a OpenPrinter state venendo a mancare e ho successo leggere i dati di spool utilizzando OpenPrinter e ReadPrinter, che risolve il nostro problema bene.

Attribuirò comunque la taglia a chiunque riesca a trovare una soluzione migliore.

1

Hai letto questo?

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

Sembra avere tutto ciò che serve :)

particolare To Turn Off Spool File Pooling on a Per Printer Queue-Basis

C'è anche questo articolo sul formato dei file di spool http://www.codeproject.com/Articles/9720/The-Windows-NT-print-spool-shadow-file-format comunque ma sembra si conosce già il formato e probabilmente non sarà di alcun aiuto.

+0

Sì, ho letto quella pagina. Vorremmo accedere ai dati di spool senza disabilitare il pooling di file di spool. Costringere i nostri clienti a modificare il registro per ogni stampante che creano (o tentare di farlo per loro) è qualcosa che preferiremmo evitare. –

Problemi correlati