Карта сайта Kansoftware
НОВОСТИУСЛУГИРЕШЕНИЯКОНТАКТЫ
KANSoftWare

Устранение проблемы печати в Delphi-сервисе с использованием TQuickReport на Windows Server 2008

Delphi , ОС и Железо , Принтеры и Печать

Проблема, с которой вы столкнулись, заключается в том, что при попытке создать форму с компонентом TQuickRep в сервисе, написанном на Delphi, возникает исключение "There Is No Default Printer Currently Selected". Это происходит, несмотря на то, что в системе присутствуют принтеры и сервис успешно работает на других компьютерах.

Причины проблемы

Проблема может быть связана с тем, что сервисы на Windows Server 2008 и более новых версиях операционной системы работают в отдельной сессии, которая не связана с сессией пользователя. По умолчанию в этой сессии не установлен принтер.

Решение проблемы

Для решения проблемы необходимо убедиться, что в сессии 0 установлен принтер. В противном случае, вам нужно изменить код так, чтобы он мог обрабатывать исключение и выбирать принтер для печати.

Варианты решения:

  1. Проверьте, установлен ли принтер в сессии 0.
  2. Измените код сервиса, чтобы он мог установить принтер перед созданием объекта TQuickRep.
  3. Установите сервис с использованием учетной записи "NetworkService" для доступа к сетевым принтерам.

Пример кода на Object Pascal для установки индекса принтера:

TQuickRep.PrinterSettings.PrinterIndex := ИндексПринтера; // Установите нужный индекс принтера
TQuickRep.Print; // Вызов метода печати

Обратите внимание:

  • При работе с сетевыми принтерами, учетная запись сервиса должна иметь соответствующие разрешения.
  • При использовании терминальных служб Windows Server 2008, следует обратить внимание на ключи реестра HKEY_CURRENT_USER\Software\Microsoft\Windows NT\CurrentVersion\Windows\SessionDefaultDevices\Session_ID.

Подтвержденные решения:

  • Создание DWORD UserSelectedDefault со значением 1 в HKEY_CURRENT_USER\Software\Microsoft\Windows NT\CurrentVersion\Windows\SessionDefaultDevices\Session_ID может помочь, если у вас есть локальный принтер выбранный.
  • Если проблема связана с сравнением принтеров в коде Delphi, изменение сравнения на без учета регистра может решить проблему.
if LowerCase(TPrinterDevice(Objects[I]).Device) = LowerCase(Device) then
begin
   // Действия по установке принтера
end;
  • В случае, если QuickReport выполняется до загрузки принтеров системой, можно дождаться загрузки принтеров перед запуском приложения или переопределить инициализацию TQRPrinter.

Заключение

Для успешной печати в сервисе на Delphi с использованием TQuickReport на Windows Server 2008, необходимо обеспечить, чтобы в сессии 0 был установлен принтер, и корректно обрабатывать ситуации, когда принтер не определен. Используйте предложенные методы для настройки и изменения кода, чтобы избежать исключений и обеспечить корректную работу сервиса.

Создано по материалам из источника по ссылке.

Проблема связана с отсутствием по умолчанию установленного принтера в сессии сервиса Windows Server 2008, что вызывает ошибку при попытке печати через TQuickReport в Delphi-сервисе.


Комментарии и вопросы

Получайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Telegram-канал delphi_kansoftware и будьте в курсе последних тенденций в разработке под Linux, Windows, Android и iOS




Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.


:: Главная :: Принтеры и Печать ::


реклама


©KANSoftWare (разработка программного обеспечения, создание программ, создание интерактивных сайтов), 2007
Top.Mail.Ru

Время компиляции файла: 2024-12-22 20:14:06
2025-02-11 00:16:22/0.0031311511993408/0