我正在使用DelphiXE3编写一个windows服务。该服务将从数据库中读取,使用quickreport5.05.1生成pdf。我计划使用TQRPDFDocumentFilter生成pdf。
在普通的VCL应用程序中一切都很好,但当我在windows服务中实现它时,当我执行QuickRep.Prepare.时,服务会挂起(没有任何例外)
我读到在windows服务中使用QuickReport是可能的,但我不知道如何使用。有什么建议吗?
代码在哪里:
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;
编辑:我还试着关闭QuickReport上的"显示进度",如另一个线程中所建议的那样。编写一些代码来捕获异常,这表明它确实抛出了一个异常。消息为"当前没有选择默认打印机"。因此,这让我相信,运行该服务的本地系统用户没有安装任何打印机,这就是问题所在。
我已经通过以下步骤解决了类似的问题(从作为Windows服务运行的Java服务器打印到共享网络打印机):
- 以将运行服务的用户身份登录
- 安装打印机
IIRC在Delphi应用程序中,打印机名称不区分大小写(在Java中是这样)。