Мда полтора года пролетело.
Пришлось вернуться к задаче создания 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);
 
Работает без ошибок.