Yo me pensaba que la diferencia entre ExtractFileDir y ExtractFilePath era esta:
ExtractFileDir: C:\Archivos de programa\Mi programa
ExtractFilePath: C:\Archivos de programa\Mi programa
\
¿Se ve la diferencia? La barrita al final.
En cuanto a Application.ExeName, hay otra alternativa, que es ParamStr(0); ya que el parámetro cero es el nombre del ejecutable (funciona incluso en los archivos bat escribiendo %0).
Salu2