Prüfe den Rückgabewert von ShellExecute!
Das wird er nicht mehr können, da der aufrufende Prozess beendet wurde.
Aber das was du da machst, ist in etwa so, also ob du erst dich erschießt und danach die Geisel erschießen willst. Ok, das war jetzt etwas makaber.
Davon abgesehen lässt sich so ein Programm nie sauber beenden, wenn es keine andere Möglichkeit gibt es zu beenden.