Я пытаюсь написать неинтерактивный процесс, который печатает PDF-файлы, и мне нужен совет по его созданию на Windows Server 2008 (и Vista/7).Печать PDF-файлов в WinServer 2008 из неинтерактивного процесса (служба Windows, запланированная задача и т. Д.)
Раньше у нас была запланированная задача (настроенная на запуск учетной записи пользователя или нет), которая будет печатать все PDF-файлы внутри каталога. (Отдельный процесс переместил бы PDF-файлы в каталог.) Во время выполнения это запустило бы другой процесс (либо Adobe Reader, либо Foxit Reader) для печати PDF. Как Adobe Reader, так и Foxit Reader работают в режиме бесшумной печати, поэтому все будет отправлено на принтер по умолчанию для пользователя, который выполнял запланированную задачу. Никакой пользовательский интерфейс никогда не создавался, и все файлы печатались без заминок. Это работало на Server 2003.
Процесс больше не работает на Server 2008. Я не совсем уверен, но я считаю, что это имеет отношение к Session 0 Isolation. Я не могу это доказать. Тем не менее, я могу сказать, что процесс работает как запланированная задача, когда он задан как «Запускать только при входе пользователя». Теперь, когда это работает, он заставляет пользователя войти в систему и, таким образом, не соответствует моим требованиям. (Моя первая подсказка была в this previous question.)
Я не могу определить, как я могу двигаться вперед по этому вопросу. Есть ли способ выполнить мои требования?
Несколько замечаний:
Каждое решение, которое я видел, кажется, использует учетные данные вошедшего в систему пользователя. См. Вопрос, который я связал выше - перечисленное решение, похоже, захватывает токен зарегистрированного пользователя и использует его для запуска программы. (Посмотрите на процедуру GetCurrentUserToken() - возвращаемое значение позже будет использоваться в вызове API CreateProcessAsUser().)
Мой текущий процесс генерирует, насколько я могу судить, интерфейс. Я проверил с помощью ProcMon, что процесс чтения (Adobe или Foxit), кажется, печатает правильно, и сам драйвер печати имеет проблемы. Это подкрепляется попыткой использовать драйвер печати в файл - драйвер печати в файл работает с тремя видимыми шагами и четко заканчивает первый для всех файлов без запуска второй. Итак, как изоляция сеанса 0 влияет на драйвер принтера? Это мне непонятно. (The best documentation I can find on the subject только упоминает, что драйверы принтеров могут быть затронуты, даже если диспетчер очереди печати работает в сеансе 0.)
Печать в качестве службы Windows никогда не работает, даже если этот процесс разрешен «Разрешить взаимодействие с рабочим столом».
Полужирный текст добавлен для противодействия эффекту стены в текстовом режиме.
В Win2k8 GDI + отключен для служб Windows. Я бы предположил, что любой Windows-читатель PDF будет использовать GDI + в какой-то момент, поэтому я не думаю, что это можно реализовать в win2k8. Интересно, решите ли вы когда-нибудь это. – yms