Лучший способ сделать это, вероятно, - создать приложение-наблюдатель, которое вы запускаете в своем основном приложении, прежде чем завершить его.
Во-первых, основное приложение должно создать мьютекс или семафор при запуске. Если вы хотите перезапустить приложение, пусть основное приложение запустит наблюдателя. Приложение-наблюдатель должно подождать, пока мьютекс / семафор основного приложения не исчезнет, а затем повторно запустить основное приложение.
Я недавно выпустил класс семафоров, написанный на VB6, который позаботится о некоторых тяжелых работах: http://www.vbforums.com/showthread.php?t=634635