Bisogno di aiuto per l’apertura di spool della stampante ombra di file (.SHD) che è bloccato

Mi interessa alcune informazioni all’interno di un file shadow (.shd) che si trova all’interno di windows directory di spooling di stampa “C:\Windows\System32\spool\PRINTERS”. Ogni volta che un processo di stampa viene avviato, un file di spool (.spl) e un’ombra di file (.shd) sono creati in tale directory. Finora non ho avuto successo nel rilevare quando un lavoro di stampa ha iniziato, e sono state in grado di mettere in pausa che il processo di stampa. Se non puoi mettere in pausa il processo, il file alla fine fanno la loro strada verso la stampante e quindi vengono eliminati da windows.

Mio problema. Non posso aprire il .SHD file perché sono bloccato in modo che non si può leggere mentre sono aperte da sprint spooler. Ho anche provato ad andare sul file in esplora risorse di windows e copiare semplicemente il file in un altro file, e che non ha funzionato neanche. L’ .SPL file di spool posso aprire però. Non faccio altro che aspettare, e abbastanza velocemente lo spooler di rilascio di tale file. Per il file shadow, però, tiene permanentemente a questo file. Purtroppo, proprio quello di cui ho bisogno.

La riga di codice che sto utilizzando in particolare per aprire il file come segue:

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

IOException ottengo è:

Il processo non può accedere al file ‘C:\Windows\system32\spool\PRINTERS\FP00083.SHD’ perché è utilizzato da un altro processo.

Quindi sì, è utilizzato da un altro processo. Il suo essere utilizzati dalla finestra il servizio spooler di stampa. Ma non penso che c’è qualcosa che posso fare a riguardo. Tutto quello che voglio fare è leggere il file. Non voglio apportare modifiche. C’è qualcosa che posso fare qui o sono solo avvitati?

 

5 Replies
  1. 2

    Selezionare l’opzione: “Mantenere i documenti stampati” (se si dispone di una stampante HP) e poi vedere il tuo file di spool cartella, sia in ombra e file di spool ci sarebbe.

    Bisogno di aiuto per l'apertura di spool della stampante ombra di file (.SHD) che è bloccato

  2. 1

    Bene, non ho trovato un modo per aggirare questo problema. Ho il sospetto che non c’è soluzione per questo e di progettazione. Tuttavia ho trovato un altro modo per ottenere le informazioni che ho voluto (così almeno pare così lontano).

    Sto usando il FindNextPrinterChangeNotification() routine di fuori del winspool.drv biblioteca. Questo ragazzo restituisce un puntatore a un PRINTER_NOTIFY_INFO struttura, che a sua volta contiene un array di PRINTER_NOTIFY_INFO_DATA strutture. All’interno dell’array, c’è un elemento con il suo “Campo” gli stati contrassegnati come “JOB_NOTIFY_FIELD_DEVMODE”. Questo elemento contiene una abbastanza grande struttura di tipo DEVMODE. La struttura è spiegata da M$ qui http://msdn.microsoft.com/en-us/library/dd183565%28v=vs.85%29.aspx . Questa struttura si presenta come esso contiene ciò che sto cercando e a quanto pare è avvolto nel .SHD file comunque in base a questa pagina http://www.undocprint.org/formats/winspool/shd. Mi piacerebbe sapere cos’altro c’è di che .SHD file, ma ancora non riesco ad aprirlo perché il suo bloccato mentre il processo è stato sospeso, e ho il sospetto che rimane bloccato fino a quando il processo è completo. Oh beh, credo che la mia nuova soluzione è più elegante di un tempo.

    • Hai provato con il numero di copie campo “dmCopies” nel caso in cui si stampa un documento di word e il valore è corretto o è sempre “1” con la nuova soluzione?
  3. 0

    Basta assicurarsi di sospendere il lavoro in bobina SIA la vostra casella e il server, allora si dovrebbe essere in grado di copiare/aprire/spostare il shd file e basta, come può il file spl. Ha funzionato per me, comunque…

  4. 0

    Questo funziona per me:

    – Blocco della stampante (ad esempio la marmellata di carta)

    – Stampa e osservare .SHD e .SPL creato

    – Stop Spooler Di Stampa

    – Aprire il file

  5. 0

    Il problema potrebbe essere la FileShare.ReadWrite parametro. Si chiede di leggere e scrivere sul file, e forse è per questo che si ottiene un errore. Si dovrebbe provare a chiedere l’autorizzazione di sola lettura.

Lascia un commento