Normalerweise würde man aber wohl noch auswerten wollen, ob der erneute Start auch funktioniert.
Da wäre dann IMO die einfachste Möglichkeit so etwas:
Delphi-Quellcode:
if ShellExecute(0, 'open', PChar(ParamStr(0)), nil, nil, SW_SHOWDEFAULT) > 32 then
Close
else
ShowMessage('Oops');
Oder man definiert sich ein privates Boolean-Feld, wertet das im OnClose aus und ruft dann einfach Close auf, nachdem man das Feld ggf. gesetzt hat.