Gerade beim CreateProcess sollte man besser nicht das Quoting
"
vergessen.
Wenn die neue Anwendung wirklich startet und dann einfach verschwindet .... siehe Windows-Ereignislog

Falls nicht, dann sollte jemand (du) nicht die
Fehlerbehandlung Fehlerauswertung vergessen.
Bzw. im eigenen Code noch etwas warten und
GetExitCodeProcess prüfen.
Delphi-Quellcode:
//uses Winapi.ShellAPI;
if ShellExecute(Self.Handle,
nil, PChar(ParamStr(0)),
nil, PChar(ExtractFilePath(ParamStr(0))), SW_NORMAL) <= 32
then
RaiseLastOSError;
Application.Terminate;
PS: Beim CreateProcess kannst'e auch einfach
GetCommandLine anstatt ParamStr(0), bzw. Application.ExeName verwenden. (für ShellExecute muß man EXE und Params leider erst trennen)
Ein Therapeut entspricht 1024 Gigapeut.