title: Proper Catastrophic Error Handling
body: <p>There's something I keep running into that I really haven't solved with Delphi programs and was wondering if anyone could instruct me on it.  As the topic says, how do you do proper catastrophic error handling?  For instance:</p>
  
  <pre><code>// is file necessary for the program present?
  if not FileExists(FilePath1) then
     begin
       raise Exception.Create(FilePath1 + ' does not exist and is required for this program to function.');
     // I obviously need to do something here to make the program QUIT and not have
     // any more code run.
  
       Application.Terminate;
       Abort;
     end;
  </code></pre>
  
  <p>I can use the exception unit there as well and throw out an exception, but the program continues as before.  I've used the halt call in the past, but it seems to not do any cleanup or the like so I end up making a big procedure with close and free calls for everything I've done just to be sure (and even then I'm not sure of any of the behind the scenes stuff).</p>
  
  <p>So what is the right way to handle such things?</p>
  
  <p>Edit: To clarify, I'm wanting to know about how to make the program do what clean-up it needs to do and then EXIT NOW and not do any other code.</p>