Question

Je suis intéressé par des informations dans un fichier d'ombre (.shd) situé à l'intérieur des fenêtres print répertoire tampon "C: \ Windows \ System32 \ spool \ Printers". Chaque fois qu'un travail d'impression est démarré, un fichier de bobine (.spl) et un fichier d'ombre (.shd) sont créés dans ce répertoire. Jusqu'à présent, j'ai réussi à détecter quand un travail d'impression a commencé, et ont été en mesure de faire une pause ce travail d'impression. Si vous ne pause pas le travail, les fichiers éventuellement faire leur chemin vers l'imprimante, puis sont supprimés par des fenêtres.

Mon problème est. Je ne peux pas ouvrir les fichiers .SHD parce qu'ils sont verrouillés de telle sorte que vous ne pouvez pas les lire alors qu'ils sont ouverts par le spooler sprint. J'ai même essayé d'aller au fichier dans l'explorateur Windows et copier simplement le fichier dans un autre fichier, et cela ne fonctionne pas non plus. Les fichiers de .SPL je peux ouvrir bien. J'attends simplement, et assez rapidement la libération de spooler ce fichier. Pour le fichier d'ombre cependant, il tient en permanence sur ce fichier. Malheureusement, son celui que je besoin.

La ligne de code que je utilise spécifiquement pour ouvrir le fichier se présente comme suit:

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

Le get IOException I est:

Le processus ne peut pas accéder au fichier 'C: \ Windows \ system32 \ spool \ Printers \ FP00083.SHD'. Car il est utilisé par un autre processus

Alors oui, il est utilisé par un autre processus. Son être utilisé par le service spooler d'impression de la fenêtre. Mais je ne pense pas qu'il y ait tout ce que je peux faire à ce sujet. Tout ce que je veux faire est de lire le fichier. Je ne veux pas apporter de modifications. Est-ce que je peux faire ici ou suis-je simplement vissé?

Était-ce utile?

La solution 2

Eh bien, je n'ai pas trouvé un moyen de contourner ce problème. Je pense qu'il n'y a pas une solution pour cela et il est par la conception. Cependant, j'ai trouvé une autre façon d'obtenir l'information que je voulais (il semble du moins jusqu'à présent).

J'utilise la routine sur FindNextPrinterChangeNotification () de la bibliothèque Winspool.drv. Ce type renvoie un pointeur vers une structure PRINTER_NOTIFY_INFO, qui à son tour contient un réseau de structures PRINTER_NOTIFY_INFO_DATA. Au sein de ce tableau, il y a un élément avec son élément « Champ » marqué comme « JOB_NOTIFY_FIELD_DEVMODE ». Cet élément contient une structure assez grande de type DEVMODE. La structure est expliquée par M $ ici http: / /msdn.microsoft.com/en-us/library/dd183565%28v=vs.85%29.aspx . Cette structure ressemble à elle contient ce que je suis à la recherche et est apparemment enveloppé dans le fichier .SHD selon cette toute façon la page http://www.undocprint.org/formats/winspool/shd . Je voudrais savoir ce que le reste est dans ce fichier .SHD, mais je ne peux toujours pas l'ouvrir parce que son verrouillé pendant que le travail est en pause, et je pense qu'il reste verrouillé jusqu'à ce que le travail est terminé. Eh bien, je pense que ma nouvelle solution est de toute façon plus élégante.

Autres conseils

Cochez l'option. " Conserver les documents imprimés " (si vous avez l'imprimante HP), puis consultez votre dossier de bobine, les deux ombres et les fichiers spool seraient là

Assurez-vous que vous faites une pause dans le travail de la bobine sur les deux votre boîte et le serveur, alors vous devriez être en mesure de copier / ouvrir / déplacer le fichier SHD comme vous pouvez le fichier spl. A travaillé pour moi, de toute façon ...

Cela fonctionne pour moi:
- Accrochez votre imprimante (par exemple le papier confiture)
- Imprimer et observer .SHD et .spl en cours de création
- Arrêter l'impression d'Spooler
- Ouvrez le fichier

Le problème est peut-être le paramètre FileShare.ReadWrite. Vous vous demandez de lire et d'écrire sur le fichier et peut-être pourquoi vous obtenez une erreur. Vous devriez essayer de demander l'autorisation de lecture seule.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top