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 - пришлось это сделать чтобы решить проблему с визуальным наследованием форм.