Besoin d'aide pour l'ouverture de spouleur d'imprimante de l'ombre de fichier (.SHD) qui est verrouillé
Je suis intéressé par quelques informations à l'intérieur d'un fichier de l'ombre (.shd) situé à l'intérieur du répertoire de file d'attente d'impression windows "C:\Windows\System32\spool\PRINTERS". Chaque fois qu'une tâche d'impression est lancée, un fichier spool (.spl) et un fichier de l'ombre (.shd) sont créés dans ce répertoire. Jusqu'à présent j'ai réussi à détecter lorsqu'un travail d'impression a commencé, et ont été en mesure de mettre en pause cette tâche d'impression. Si vous n'avez pas interrompre le travail, les fichiers finissent par faire leur chemin à l'imprimante et sont ensuite supprimées par windows.
Mon problème. Je ne peux pas ouvrir les .SHD fichiers, car ils sont enfermés dans une telle manière que vous ne pouvez pas les lire alors qu'ils sont ouverts par le sprint spouleur. J'ai même essayé d'aller dans le fichier dans l'explorateur windows et il vous suffit de copier le fichier vers un autre fichier, et qui ne fonctionne pas non plus. L' .SPL fichiers spool, je peux l'ouvrir mais. J'attends simplement et assez rapidement le spouleur version de ce fichier. Pour le fichier de l'ombre, bien que, il tient en permanence à ce fichier. Malheureusement, c'est la seule dont j'ai besoin.
La ligne de code que j'utilise spécifiquement pour ouvrir le fichier se présente comme suit:
m_spoolJobStream = new FileStream(spoolFilePath, FileMode.Open, FileAccess.Read, FileShare.ReadWrite);
La IOException que je reçois est:
Le processus ne peut pas accéder au fichier 'C:\Windows\system32\spool\PRINTERS\FP00083.SHD" parce qu'il est utilisé par un autre processus.
Donc, oui, il est utilisé par un autre processus. Qu'elle soit utilisée par la fenêtre du service spouleur d'impression. Mais je ne pense pas qu'il y est quelque chose que je peux faire à ce sujet. Tout ce que je veux faire est de lire le fichier. Je ne veux pas y apporter de modifications. Est-ce que je peux le faire ici, ou suis-je tout simplement vissé?
Vous devez vous connecter pour publier un commentaire.
Cochez l'option: "Conserver les documents imprimés" (si vous avez une imprimante HP) et ensuite voir votre fichier spool dossier, des zones d'ombre et les fichiers spool serait là.
Bien, je n'ai pas trouvé un moyen de contourner ce problème. Je soupçonne qu'il ya pas de solution pour cela, et c'est par la conception. Toutefois j'en ai trouvé un autre moyen d'obtenir les informations que je voulais (au moins, il semble donc, à ce jour).
Je suis en utilisant le FindNextPrinterChangeNotification() de la routine de la winspool.drv bibliothèque. Ce mec retourne un pointeur vers un PRINTER_NOTIFY_INFO structure, qui à son tour contient un tableau de PRINTER_NOTIFY_INFO_DATA structures. Dans cette matrice, il y a un élément avec son "Champ" membre marqués comme "JOB_NOTIFY_FIELD_DEVMODE". Cet élément contient une assez grande structure de type DEVMODE. La structure est décrite par M$ ici http://msdn.microsoft.com/en-us/library/dd183565%28v=vs.85%29.aspx . Cette structure ressemble, il contient ce que je suis à la recherche pour et, apparemment, est enveloppé dans de la .SHD fichier de toute façon, selon cette page http://www.undocprint.org/formats/winspool/shd. J'aimerais savoir quoi d'autre est dans la .SHD fichier, mais je ne peux pas l'ouvrir parce que sa verrouillé alors que le travail est suspendu, et je soupçonne qu'il reste verrouillée jusqu'à ce que le travail est terminé. Eh bien, je pense que ma solution est plus élégante de toute façon.
Assurez-vous juste d'interrompre le travail dans la bobine sur votre box et le serveur, alors vous devriez être en mesure de copier/open/déplacer le fichier shd comme vous pouvez le fichier spl. A travaillé pour moi, de toute façon...
Cela fonctionne pour moi:
- Accrocher votre imprimante (par exemple, la confiture le papier)
- Imprimer et de les observer .SHD et .SPL en cours de création
- Arrêter De Spouleur D'Impression
- Ouvrir le fichier
Le problème est peut-être le partage de fichiers.ReadWrite paramètre. Vous demandons de lire et d'écrire sur le fichier et peut-être que c'est pourquoi vous obtenez une erreur. Vous devriez essayer de demander une autorisation en lecture seule.