Я пишу службу Windows с помощью Delphi XE3. Услуга будет считываться из базы данных, генерировать pdf-файл, используя quickreport 5.05.1. Я планирую сгенерировать PDF с помощью TQRPDFDocumentFilter.Создание PDF с помощью QuickReport из службы Windows в Delphi
Все работает нормально в обычном приложении VCL, но когда я реализую его в службе Windows, служба меняет (без каких-либо исключений), когда я делаю QuickRep.Prepare.
Я читал, что можно использовать QuickReport в службе windows, но я не знаю, как это сделать. Какие-либо предложения?
Где код:
procedure foo
var
pdfFilter: TQRPDFDocumentFilter;
begin
with TForm2.Create(Self) do
begin
ClientDataSet1.Open;
QuickRep1.Prepare;
pdfFilter := TQRPDFDocumentFilter.Create(GetApplicationFolder() + 'test.pdf');
try
QuickRep1.QRPrinter.ExportToFilter(pdfFilter);
finally
pdfFilter.Free;
ClientDataSet1.Close;
end;
end;
end;
Edit: Я также попытался выключая «показать прогресс» на QuickReport, как предложено в другом потоке. Написание кода для исключения исключений показывает, что он действительно выбрасывает его. Появится сообщение «В настоящее время не выбран принтер по умолчанию». Таким образом, это заставляет меня думать, что пользователь локальной системы, в котором работает служба, не имеет установленных принтеров и что это проблема.
[Создание PDF с быстрыми отчетами за веб-сервером Delphi] (http://stackoverflow.com/questions/401743/generating-pdf-with-quick-reports-behind-a-delphi-web-server) – bummi
Do вы начинаете свою службу с привилегий corect, чтобы записать ее в файлы? В Windows XP это не проблема, но в Windows Vista и новее существует несколько профилей привилегий, в которых запускаются службы. Они были реализованы для повышения безопасности путем ограничения того, что может сделать каждое устройство. – SilverWarior
Bummi: Я уже прочитал эту тему. Похоже, что он смог ее решить, но предоставленная информация не дает никаких указаний о том, как это сделать. –