Для полноты - блок finally будет не выполняться, если процесс или поток, выполняющий блок try..finally, завершается с помощью TerminateProcess / TerminateThread.
Например, блок finallyне будет выполняться в приведенном ниже коде.
o := TObject.Create;
try
TerminateThread(GetCurrentThread, 0);
finally
o.Free;
end;