Нужна помощь в открытии принтера Spool File (.shd), который заблокирован
-
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, но я все еще не могу открыть его, потому что она заблокирована, пока работа приостановилась, и я подозреваю, что он остается заблокированной, пока работа не будет завершена. О, хорошо, я думаю, что мое новое решение в любом случае более элегантно.
Другие советы
Просто убедитесь, что вы приостановили задание в катушке как на вашем поле, так и на сервере, тогда вы сможете скопировать/открыть/переместить SHD -файл так же, как вы можете файл SPL. В любом случае работал на меня ...
Это работает для меня:
- Повесите свой принтер (например, джемость бумаги)
- Печать и наблюдать .shd и .spl создается
- Остановите печатный шлюз
- Откройте файл
Проблема может быть параметр fileshare.readwrite. Вы просите прочитать и написать в файле, и, возможно, именно поэтому вы получаете ошибку. Вы должны попытаться попросить разрешения только для чтения.