Das ShellExecute sollte so klappen. Probier höchstens mal noch, ob der Pfad auch wirklich mit einem \ endet, also einfach den 3. Parameter so übergeben:
PChar(IncludeTrailingPathDelimiter(ExtractFilePath(ParamStr(0)))+'irgend eine Datei.exe')
Deine 2. Frage sollte aber selbst beantwortet werden, denk ich, denn was meinst du wohl, was nach einem application.terminate passiert
... Nämlich