1. В событии закрытия программы запускаешь новый экземпляр программы (WinExec, ShellExecut, CreateProcess)
2. В событии открытия программы проверяешь на наличие имеющегося экземпляра приложения (использовать можно эвенты, мутексы)
3. Если экземпляр присуствует, ждем по таймауту его закрытия (WaitForSingleObject).
4. После закрытия отображаем форму.