Во-первых, если ваши приложения должны работать без входа пользователя, это должны быть сервисы.
Теперь при создании службы вы можете решить, как вы хотите реагировать на сбои. Вы можете настроить перезапуск службы в случае сбоя (см. Диалоговое окно свойств службы).
В случае сбоя App1, нужно ли остановить App2, запустить App1, а затем, через 10 минут, перезапустить App2? Или в этом случае, вы можете просто перезапустить App1 немедленно?
Однако из того, что вы описали, контроль порядка старта выглядит достаточно сложным, поэтому встроенной конфигурации службы будет недостаточно, поэтому вам, скорее всего, придется где-то хранить эту логику.
Если для App1 нормально знать о App2, вы могли бы иметь эту логику в App1. В этом случае приложение 1 будет иметь 2 обязанности (запускать себя и управлять состоянием службы App2).
С другой стороны, у вас может быть третий сервис, который отвечает только за управление жизненным циклом и работоспособностью сервисов App1 и App2. Это сторожевой таймер, который предлагает ChrisBD.