Запуск приложения с графическим интерфейсом в режиме службы Windows - PullRequest
3 голосов
/ 06 апреля 2010

Я пишу сервер, работающий в качестве службы Windows, который по запросу вызывает Firefox для создания снимка страницы в формате pdf.

Я знаю, что запускать программу с графическим интерфейсом в сервисном режиме - плохая идея, но серверная природа моей программы не позволяет запускать ее в пользовательском режиме. Запуск прокси на уровне пользователя также не вариант, поскольку на компьютере с запущенным сервером может не быть интерактивного пользователя, вошедшего в систему.

В моих экспериментах Firefox успешно создавал pdf, когда служба работала под учетной записью пользователя, которая уже вошла в систему. Очевидно, что это не сработало в других случаях: для локальной системы и учетных записей пользователей, которые не вошли в систему. В LocalSystem с включенной опцией «Разрешить службе взаимодействовать с рабочим столом» я мог видеть, что Firefox запустил, который сообщает, что не может найти принтер.

Поскольку было бы непрактично требовать открытого сеанса пользователя для запуска pdf-сервера, есть ли обходной путь для этого, кроме запуска всего этого с виртуальной машины?

ОБНОВЛЕНИЕ: Я понял, что проблема на самом деле не в разрешениях учетной записи, а в невидимом модальном диалоге, который FF ожидал во время работы в режиме обслуживания.

Однако по-прежнему невозможно создать PDF-файл, когда FF работает под учетной записью LocalSystem. FF говорит, что не может найти принтер, и мне интересно, это разрешение можно как-то включить?

Ответы [ 4 ]

7 голосов
/ 14 апреля 2010

Возможно, вы захотите попробовать другой подход, если бы вы включили в ваш проект некоторую библиотеку PDF .NET ( PDFsharp - хороший вариант с открытым исходным кодом), а не использовали ее в сочетании с управлением WebBrowser вы также включили бы в свой проект рендеринг PDF.

Не забудьте использовать атрибут STAThread, если попробуете это.

0 голосов
/ 15 апреля 2010

Можете ли вы вместо этого запустить программу как запланированную задачу? Задача может быть назначена определенной учетной записи пользователя, которая должна обходить ограничения службы.

0 голосов
/ 14 апреля 2010

Пару лет назад у меня возникла проблема: общий сетевой принтер на псевдоустройстве, запускающий Ghostscript для перевода PS-> PCL и печати на реальном принтере. Служба спулера печати работала как Локальная система, а драйвер псевдоустройства затрудняет выполнение Ghostscript из сервисного режима. Мне удалось решить эту проблему, скопировав несколько ключей реестра из куста HKCU в HKLM.

0 голосов
/ 06 апреля 2010

Я прошел через подобную головоломку с MS Word, работающим без присмотра. Что вам нужно сделать, так это войти в систему как пользователь, которого вы настроили для запуска процесса firefox и пройти через процесс настройки принтеров.

Вполне возможно, что достаточно просто войти в систему под этим пользователем - некоторые вещи выполняются при первом входе в систему.

Я прошу прощения, я не достаточно ясно - я имею в виду, что вы должны войти в систему в интерактивном режиме, используя эту учетную запись, настроить принтер по умолчанию, выйти из системы, а затем запустить службу

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...