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

Я пытаюсь написать неинтерактивный процесс, который печатает 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 ответ

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

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

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