Было бы полезно, если бы вы описали, почему вам нужно следить за ним.
Работает ли без присмотра без графического интерфейса? Тогда вы можете создать службу Windows вместо. Есть опции перезапуска для служб уже в XP.
Это приложение с графическим интерфейсом, которое предоставляет некоторые фоновые сервисы, даже если пользователь отсутствует? Попробуйте разделить его на службу Windows (которая должна выполняться постоянно) и приложение с графическим интерфейсом, которое может аварийно завершить работу, не влияя на работу службы.
Или вы пишете приложение "киоск", которое не может рассчитывать на то, что пользователь перезапустит его?
Вы можете написать небольшое приложение-оболочку, которое просто запускает ваше реальное приложение и ожидает его выхода. Когда он выходит, проверьте, например, код выхода, чтобы определить, регулярно ли он выходил из строя или вышел.
Чтобы отслеживать зависания приложений, попросите ваше реальное приложение «пинговать» оболочку через равные промежутки времени (используя таймер). Если оболочка не получает пинг в течение определенного времени, она может убить и перезапустить реальное приложение.
Поскольку обертка мала, риск ее падения также низок. Но если это проблема для вас, реальное приложение, вероятно, может контролировать оболочку в обратном порядке.