Worker Codec Isolati dai Crash
HotPDF può spostare la decodifica delle immagini ad alto rischio DCTDecode, JPXDecode e JBIG2Decode fuori dal processo host
Modalità di isolamento
cimAutomaticè il predefinito e usaHotPDFCodecWorker.exequando è disponibile accanto all'eseguibile host, altrimenti preserva il percorso compatibile in-processcimRequiredfallisce chiudendosi quando il worker manca, non può avviarsi, si blocca, va in timeout, rifiuta l'input o supera un limite di outputcimDisabledusa sempre i decoder in-process esistenti
Una volta che un worker disponibile accetta una richiesta, cimAutomatic non ritenta input falliti o malevoli nel processo host
Confine di processo
Ogni richiesta di decodifica viene eseguita in un processo nascosto fresco assegnato a un Job Object Windows monoprocesso
- Il Job Object termina il worker e qualsiasi discendente tentato quando il suo handle si chiude
CodecWorkerMemoryLimitBytesapplica un tetto di memoria commessa per processo e ha per predefinito 512 MiBCodecWorkerTimeoutMillisecondsha per predefinito 10.000 ms e termina un worker bloccato- L'input codificato, le globali JBIG2 facoltative e l'output BGR24 usano un unico mapping di memoria condivisa con nome casuale e un protocollo versionato a larghezza fissa
- La capacità di output decodificata è delimitata dalla geometria immagine dichiarata e da
DecodeBudgetBytes - Le richieste JPEG a bassa risoluzione portano dimensioni di destinazione esatte e restituiscono una geometria DCT ridotta senza costruire un raster worker a piena risoluzione
Configurazione
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;
Un CodecWorkerExecutable vuoto si risolve in HotPDFCodecWorker.exe accanto all'applicazione corrente
Telemetria
GetLastCodecWorkerInfo riporta lo stato, l'identificatore di processo, il codice di uscita, i millisecondi trascorsi e una diagnostica host delimitata
GetLastJPEGReducedDecodeInfo riporta la geometria sorgente, ridimensionata, di output e di scanline dopo una richiesta JPEG ridotta isolata
Stati distinti coprono worker non disponibili o non avviabili, timeout, crash, rifiuto della decodifica, disallineamento del protocollo e limiti dell'output decodificato
Build e distribuzione
build-HotPDF-Codec-Worker.cmd
Il comando di build emette worker Win32 e Win64 separati sotto tools\CodecWorker\<platform>\Release; distribuire il worker corrispondente all'architettura del processo host