Я сделал нечто подобное, реализовав сторожевой таймер. Сторожевая собака работала в качестве службы и ожидала пинга (называемого лаской собаки) из контролируемого процесса. Если отслеживаемый процесс завершится из-за исключительной ситуации, сторожевой таймер очистит и перезапустит приложение.
Если приложение не отвечает (в течение определенного времени не выполняется пинг), сторожевой таймер убивает его и затем перезапускает.
Вот ссылка на реализацию, которую вы можете использовать:
http://www.codeproject.com/KB/security/WatchDog.aspx
(PS: я реализовал свою собственную версию, но я не могу опубликовать ее здесь. Я нашел ее по быстрому поиску в Google и не имею непосредственного опыта в этой конкретной реализации.)