Halt, насколько я помню, не рекомендуется использовать.
Да, после создания RTTI-объектов категорически не рекомендуется.
Я такие дела (вывод логин формы,..) делаю прямо из PROGRAM-файла, а не из юнита основной формы - то есть до  "Application.Run". В этом случае можно халтить. Вот рабочий код :
- Код: Выделить всё
- program podpiska;
 {$ifdef FPC}{$mode objfpc}{$h+}{$INTERFACES CORBA}{$endif}
 {$ifdef FPC}
 {$ifdef mswindows}
 //  {$apptype console}
 {$apptype gui}
 {$endif}
 {$endif}
 uses
 {$ifdef FPC}{$ifdef linux}cthreads,{$endif}{$endif}msegui,mseforms,
 main,dmmain,dmprint, dmacnt1, dmf18,
 dmrefs,
 dmspf6,
 connsetupform,mseconsts,mseconsts_ru,mseconsts_uzcyr,loginform,mseglob;
 
 {$ifdef mswindows}
 {$R podpiska-icon.res}
 {$endif}
 
 begin
 setlangconsts('ru');
 application.createdatamodule(tdmmainmo,dmmainmo);
 
 // если не автологин админом -
 // вывести логин-форму и, если логин неуспешен - завершить программу
 if not dmmainmo.fldAdminLogin.asboolean then begin
 application.createform(tloginfo,loginfo);
 // выйти из программы, если
 if (loginfo.show(true) <> mr_ok) // логин отменен
 and
 // повторная проверка, так как fldAdminLogin может быть изменено
 // в loginfo (выбор режима админа)
 (not dmmainmo.fldAdminLogin.asboolean)
 then begin
 halt; // application.terminate before application.run causes exitcode=217
 end;
 end;
 
 application.createdatamodule(tdmprintmo, dmprintmo);
 application.createform(tmainfo,mainfo);
 application.run;
 end.
 
Внимание ! С недавних OnCreate файрится после OnLoaded - пришлось это сделать чтобы решить проблему с визуальным наследованием форм.