Страница 1 из 1

Печать из windows service

Добавлено: 16 май 2017, 17:43
ВВТ
Добрый день.

У нас есть windows service. Документы там генерировались давно.
Просто

stiReport.Print(false, printerSettings);

И всё отлично работало.
И даже с сетевыми принтерами.
Потом пошли дальше. Захотели печать на принтеры из других домен.
Сделали тестовое приложение(консоль, не сервис).

using (new NetworkConnection(queueItem.printerData.WorkstationName, credentials))
stiReport.Print(false, printerSettings);

где NetworkConnection известное, уже почти стандартное решение, использует WNetAddConnection2
и все заработало в тестовом приложении.

поместили код в сервис и...

System.Drawing.Printing.InvalidPrinterException: Settings to access printer '\\dcpha.local\printer_room204' are not valid.
at Stimulsoft.Base.StiExceptionProvider.Show(Exception exception)
at Stimulsoft.Report.Print.StiPrintProvider.Print(

погуглил. нашел много такого

"Printing from a Windows service is really painful. It seems to work... sometimes... but finally it craches or throws an exception from time to time, without any clear reason. It's really hopeless. Officially, it's even not supported, without any explanation, nor any proposal for an alternate solution."

И стало совсем непонятно. Можно печатать или нет? Как печатать если принтер в другом домене?

Спасибо.

Re: Печать из windows service

Добавлено: 17 май 2017, 15:39
Ivan
Здравствуйте.
"Printing from a Windows service is really painful. It seems to work... sometimes... but finally it craches or throws an exception from time to time, without any clear reason."
Эта цитата очень хорошо отражает наше мнение по этой проблеме ;)
Есть проблемы, которые мы тоже не смогли решить при печати из сервиса.
поместили код в сервис и...
System.Drawing.Printing.InvalidPrinterException: Settings to access printer '\\dcpha.local\printer_room204' are not valid.
at Stimulsoft.Base.StiExceptionProvider.Show(Exception exception)
at Stimulsoft.Report.Print.StiPrintProvider.Print(
В прошлом году мы сделали небольшую доработку, и теперь при возникновении ошибок при печати стэк ошибки показывается корректно (не ведёт в наш StiExceptionProvider).
Иногда это позволяет точнее определить причину проблемы.
Попробуйте использовать последний релиз нашего продукта.

Также пару слов про печать на сетевые принтеры.
Технология WPF имеет специальный класс PrintServer, т.е. сетевой адрес принтера разбивается на имя сервера и имя принтера на сервере.
В некоторых случаях печать через WPF получается лучше, т.е. получается достучаться до некоторых принтеров, которые через WinForms недоступны.
Но в то же время WPF более капризный, и часто валятся ошибки печати из-за каких-нибудь настроек безопасности, на которые WinForms вообще внимания не обращает.

Спасибо.