Мда полтора года пролетело.
Пришлось вернуться к задаче создания PDF из службы.
В этот раз завернул в try except
- Код: Выделить всё
procedure GoTestPDF();
var file_tmp, filename, msg:string; fffl:boolean; frReport1: TfrReport;
begin
CrSection.Enter;
file_tmp:='T:TESTmaketsTestPDF2file.lrf';
filename:='T:TESTmaketsTestPDF2file';
msg:='';
frReport1:= TfrReport.Create(nil);
frReport1.LoadFromFile( file_tmp );
try
frReport1.ShowProgress:=false;
fffl:=frReport1.PrepareReport();
except
on E: Exception do begin msg:=msg+' / Exception Prepare --- '+E.ToString; end;
end;
try
if fffl then frReport1.ExportTo(TlrPDFExportFilter, filename+'1.pdf');
except
on E: Exception do begin msg:=msg+' / Exception Export1 --- '+E.ToString; end;
end;
try
if fffl then frReport1.ExportTo(TfrTNPDFExportFilter, filename+'2.pdf');
except
on E: Exception do begin msg:=msg+' / Exception Export2 --- '+E.ToString; end;
end;
writelog(msg);
CrSection.Leave;
end;
Файлы TestPDF2file1.pdf, TestPDF2file2.pdf так же создаются пустыми = 0байт
а в логах увидел интересное
- Код: Выделить всё
2023-06-22_21:05:47.925 -
/ Exception Export1 --- EThread: CheckSynchronize called from non-main thread "$1198"
/ Exception Export2 --- EThread: CheckSynchronize called from non-main thread "$1198"
Т.е. есть проблема работы с потоками, но не понятно почему так.
Процедура запускается по таймеру который устанавливается при запуске службы в onDataModuleStart
Добавлено спустя 16 часов 19 минут 22 секунды:Костыли так костыли
Код перенес в консольное приложение (Программа - Консольная программа на FreePascal со включенными доп.возможностями) creator1pdf.exe
И запускаю ее из службы
- Код: Выделить всё
procedure GoCreatePDF();
var str:string; AProcess: TProcess;
begin
AProcess := TProcess.Create(nil);
Try
AProcess.Options := AProcess.Options + [poWaitOnExit];
AProcess.Executable := 'creator1PDF.exe';
AProcess.Execute;
Except
on E: Exception do begin str:= 'Exception --- '+E.ToString; end;
end;
AProcess.Free;
end;
writelog(msg);
Работает без ошибок.