Изоляция codec worker от сбоев

HotPDF может вынести декодирование изображений с высоким риском — DCTDecode, JPXDecode и JBIG2Decode — из хост-процесса

Режимы изоляции

Как только доступный worker принял запрос, cimAutomatic не ретраит сбойный или вредоносный ввод в хост-процессе

Граница процесса

Каждый запрос декодирования выполняется в свежем скрытом процессе, назначенном в однопроцессный Windows Job Object

Конфигурация

PDF.CodecIsolationMode := cimRequired;
PDF.CodecWorkerExecutable :=
  'C:\Program Files\MyApp\HotPDFCodecWorker.exe';
PDF.CodecWorkerTimeoutMilliseconds := 5000;
PDF.CodecWorkerMemoryLimitBytes := 256 * 1024 * 1024;

Bitmap := PDF.ExtractLoadedImage(0);
if Bitmap = nil then
begin
  PDF.GetLastCodecWorkerInfo(Info);
  Writeln(Ord(Info.Status), ': ', Info.ErrorMessage);
end;

Пустой CodecWorkerExecutable разрешается в HotPDFCodecWorker.exe рядом с текущим приложением

Телеметрия

GetLastCodecWorkerInfo сообщает статус, идентификатор процесса, код выхода, прошедшие миллисекунды и ограниченную диагностику на стороне хоста

GetLastJPEGReducedDecodeInfo сообщает геометрию источника, масштабирования, вывода и scanline после изолированного reduced JPEG-запроса

Отдельные статусы покрывают недоступных или незапускаемых worker'ов, таймаут, падение, отказ декодирования, несовпадение протокола и лимиты декодированного вывода

Сборка и развёртывание

build-HotPDF-Codec-Worker.cmd

Команда сборки выдаёт отдельные worker'ы Win32 и Win64 под tools\CodecWorker\<platform>\Release; разворачивайте worker, совпадающий с архитектурой хост-процесса

Связанные API