Я пытаюсь написать неинтерактивный процесс, который печатает 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 никогда не работает, даже если для этого процесса установлен флажок «Разрешить службе взаимодействовать с рабочим столом».
Добавлен жирный текст, чтобы противостоять вызывающему размытие эффекту текстовой стены.