Domanda

Sono interessato ad alcune informazioni all'interno di un file shadow (.shd) situato all'interno della directory spooling di Windows Stampa "C: Windows System32 Spool Stampanti". Ogni volta che viene avviato un lavoro di stampa, in quella directory vengono creati un file spool (.spl) e un file shadow (.shd). Finora ho avuto successo nel rilevare quando è iniziato un lavoro di stampa e sono stato in grado di mettere in pausa quel lavoro di stampa. Se non fermi il lavoro, i file alla fine si dirigono verso la stampante e quindi vengono eliminati da Windows.

Il mio problema è. Non posso aprire i file .shd perché sono bloccati in modo tale da non poterli leggere mentre sono aperti dallo spooler Sprint. Ho anche provato ad andare al file in Windows Explorer e semplicemente copiare il file in un altro file, e non ha funzionato neanche. I file spool .spl che posso aprire però. Aspetto semplicemente, e abbastanza rapidamente il rilascio di quel file spooler. Per il file Shadow, tuttavia, si aggrappa in modo permanente a questo file. Sfortunatamente, è quello di cui ho bisogno.

La riga di codice che sto usando specificamente per aprire il file è la seguente:

m_spoolJobStream = new FileStream(spoolFilePath, FileMode.Open, FileAccess.Read, FileShare.ReadWrite);

L'Ioexception che ottengo è:

Il processo non può accedere al file 'C: Windows System32 Spool Stampanti FP00083.SHD' perché viene utilizzato da un altro processo.

Quindi sì, viene utilizzato da un altro processo. Viene utilizzato dal servizio di stampa di stampa della finestra. Ma non credo che ci sia qualcosa che posso fare al riguardo. Tutto quello che voglio fare è leggere il file. Non voglio apportare modifiche ad esso. C'è qualcosa che posso fare qui o sono appena fregato?

È stato utile?

Soluzione 2

Bene, non ho trovato un modo per aggirare questo problema. Sospetto che non ci sia soluzione per questo ed è per progettazione. Tuttavia ho trovato un altro modo per ottenere le informazioni che volevo (almeno sembra così finora).

Sto usando la routine FindNextPrinterChangenotification () dalla libreria WinSpool.drv. Questo ragazzo restituisce un puntatore a una struttura Printer_Notify_info, che a sua volta contiene una matrice di strutture Printer_Notify_info_data. All'interno di quell'array, c'è un elemento con il suo membro "Field" contrassegnato come "Job_notify_field_devmode". Questo elemento contiene una struttura abbastanza grande di tipo DevMode. La struttura è spiegata da m $ qui http://msdn.microsoft.com/en-us/library/dd183565%28v=vs.85%29.aspx . Questa struttura sembra che contiene ciò che sto cercando e apparentemente è avvolto nel file .shd comunque secondo questa pagina http://www.undocprint.org/formats/winspool/shd. Mi piacerebbe sapere cos'altro c'è in quel file .shd, ma non riesco ancora a aprirlo perché è bloccato mentre il lavoro è messo in pausa e sospetto che rimanga bloccato fino al completamento del lavoro. Vabbè, penso che la mia nuova soluzione sia comunque più elegante.

Altri suggerimenti

Controlla l'opzione: "Conservare i documenti stampati"(Se hai la stampante HP) e quindi consultare la cartella dei file spool, sia i file di ombra e spool sarebbero lì.

enter image description here

Assicurati di mettere in pausa il lavoro nella bobina sia sulla casella che sul server, quindi dovresti essere in grado di copiare/aprire/spostare il file SHD proprio come puoi il file SPL. Ha funzionato per me, comunque ...

Questo funziona per me:
- Appendi la stampante (ad es. Jam la carta)
- Stampa e osserva .shd e .spl in fase di creazione
- Stop Stamp Spooler
- Apri il file

Il problema potrebbe essere il parametro FileShare.ReadWrite. Stai chiedendo di leggere e scrivere sul file e forse è per questo che ricevi un errore. Dovresti provare a chiedere l'autorizzazione di sola lettura.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top