Печать PDF-файлов в WinServer 2008 из неинтерактивного процесса (служба Windows, запланированное задание и т. Д.) - PullRequest
5 голосов
/ 30 августа 2011

Я пытаюсь написать неинтерактивный процесс, который печатает PDF-файлы, и мне нужен совет о том, как создать это на Windows Server 2008 (и Vista / 7).

Ранее у нас было запланированное задание (настроено на выполнение независимо от того, вошла ли учетная запись пользователя), которое печатало все PDF-файлы внутри каталога. (Отдельный процесс будет перемещать PDF-файлы в каталог.) Во время выполнения это приведет к ускорению другого процесса (либо Adobe Reader, либо Foxit Reader) для печати PDF. Как в Adobe Reader, так и в Foxit Reader предусмотрена автоматическая печать, поэтому все будет отправлено на принтер по умолчанию для пользователя, с которым выполнялось запланированное задание. Пользовательский интерфейс не был сгенерирован, и все файлы будут напечатаны без проблем. Это работало на сервере 2003.

Процесс больше не работает на Server 2008. Я не совсем уверен, но я полагаю, что это связано с изоляцией сеанса 0. Я не могу доказать это. Тем не менее, я могу сказать, что процесс работает как запланированное задание, если для него установлено значение «Запускать только когда пользователь вошел в систему» ​​. Теперь, пока это работает, он заставляет пользователя войти в систему и, таким образом, не соответствует моим требованиям. (Моя первая подсказка была в этом предыдущем вопросе .)

Я не могу определить, как я могу двигаться вперед в этом. Есть ли способ выполнить мои требования?

Несколько заметок:

Кажется, что каждое решение, которое я видел, использует учетные данные вошедшего в систему пользователя. См. Вопрос, который я связал выше - решение, указанное в списке, похоже, получает токен вошедшего в систему пользователя. и использовать его для запуска программы. (Посмотрите на процедуру GetCurrentUserToken () - возвращаемое значение позже используется в вызове API CreateProcessAsUser ().)

Мой текущий процесс, насколько я могу судить, не генерирует никакого пользовательского интерфейса. Я с помощью ProcMon проверил, что процесс считывания (Adobe или Foxit) отображается правильно и сам драйвер печати кажется, есть проблема. Это подтверждается попыткой использовать драйвер печати в файл - драйвер печати в файл выполняется в три видимых этапа и четко завершает первый для всех файлов, не запуская второй. Итак, как изоляция сеанса 0 влияет на драйвер принтера? Это мне неясно. ( Лучшая документация, которую я могу найти по этому вопросу , упоминает только о том, что драйверы принтера могут быть затронуты, даже если диспетчер очереди печати работает в сеансе 0.)

Печать в качестве службы Windows никогда не работает, даже если для этого процесса установлен флажок «Разрешить службе взаимодействовать с рабочим столом».

Добавлен жирный текст, чтобы противостоять вызывающему размытие эффекту текстовой стены.

1 Ответ

0 голосов
/ 29 ноября 2012

Попробуйте использовать Foxit Reader вместо Acrobat-Reader. Foxit Reader правильно поддерживает выполнение без GUI / командной строки, также в Windows 2008 и выше!

Печать также возможна, но вам придется добавлять (или проверять) принтер в сеансе 0 при каждом запуске задания на печать.

Если вам нужна дополнительная помощь, просто спросите еще раз. Я уже создал скрипт powershell, который запускается в планировщике задач для печати pdf-файлов с помощью Foxit Reader.

...