Нужна помощь в открытии принтера Spool File (.shd), который заблокирован

StackOverflow https://stackoverflow.com/questions/7340882

  •  27-10-2019
  •  | 
  •  

Вопрос

Меня интересует некоторая информация внутри флоума (.shd), расположенной в каталоге Windows Print Spooling "C: Windows System32 Spool Printers". Каждый раз, когда начинается задание печати, в этом каталоге создаются файл катушки (.spl) и теневой файл (.shd). До сих пор я добился успеха в обнаружении, когда началась работа печати, и я смог сделать паузу этой печатной задачей. Если вы не остановитесь на работе, файлы в конечном итоге пробиваются к принтеру, а затем удаляются Windows.

Моя проблема в том. Я не могу открыть файлы .shd, потому что они заблокированы таким образом, что вы не можете прочитать их, пока они открыты Sprint Spooler. Я даже попытался перейти в файл в Windows Explorer и просто скопировать файл в другой файл, и это тоже не сработало. Файлы .spl Spool я могу открыть, хотя. Я просто жду, и довольно быстро выпустите этот файл Spooler. Для теневого файла, хотя он постоянно удерживается в этом файле. К сожалению, это тот, который мне нужен.

Строка кода, которую я использую специально для открытия файла, заключается в следующем:

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

IOException, которое я получаю, это:

Процесс не может получить доступ к файлу 'C: Windows System32 Spool Printers fp00083.shd', потому что он используется другим процессом.

Так что да, это используется другим процессом. Он используется в сфере Spooler в окне. Но я не думаю, что есть что -то, что я могу с этим поделать. Все, что я хочу сделать, это прочитать файл. Я не хочу вносить в это какие -либо изменения. Есть ли что -нибудь, что я могу здесь сделать или я только что облажался?

Это было полезно?

Решение 2

Ну, я не нашел способ обойти эту проблему. Я подозреваю, что для этого нет решения, и это по дизайну. Однако я нашел другой способ получить информацию, которую я хотел (по крайней мере, это кажется до сих пор).

Я использую рутину findnextprinterchangenotification () из библиотеки winspool.drv. Этот парень возвращает указатель в структуру printer_notify_info, которая, в свою очередь, содержит массив структур Printer_notify_info_data. В этом массиве есть элемент с его членом «поле», помеченным как "job_notify_field_devmode". Этот элемент содержит довольно большую структуру типа DevMode. Структура объясняется M $ здесь http://msdn.microsoft.com/en-us/library/dd183565%28v=vs.85%29.aspx Анкет Эта структура выглядит так, как будто она содержит то, что я ищу, и, очевидно, обернута в файле .shd в любом случае в соответствии с этой страницей http://www.undocprint.org/formats/winspool/shd. Анкет Я хотел бы знать, что еще в этом файле .shd, но я все еще не могу открыть его, потому что она заблокирована, пока работа приостановилась, и я подозреваю, что он остается заблокированной, пока работа не будет завершена. О, хорошо, я думаю, что мое новое решение в любом случае более элегантно.

Другие советы

Проверьте вариант: "Держите печатные документы«(Если у вас есть HP Printer), а затем увидите папку с файлами катушки, там были бы файлы Shadow и Spool.

enter image description here

Просто убедитесь, что вы приостановили задание в катушке как на вашем поле, так и на сервере, тогда вы сможете скопировать/открыть/переместить SHD -файл так же, как вы можете файл SPL. В любом случае работал на меня ...

Это работает для меня:
- Повесите свой принтер (например, джемость бумаги)
- Печать и наблюдать .shd и .spl создается
- Остановите печатный шлюз
- Откройте файл

Проблема может быть параметр fileshare.readwrite. Вы просите прочитать и написать в файле, и, возможно, именно поэтому вы получаете ошибку. Вы должны попытаться попросить разрешения только для чтения.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top