Стратегии реализации режима восстановления

У меня есть приложение Windows, которое в случае сбоя я хотел бы по умолчанию использовать в «режиме восстановления» при первом запуске после сбоя.

Я в порядке, помечая ошибку и различные действия, которые пользователь может сделать для восстановления, но фактический запуск утилиты режима восстановления вызывает у меня головную боль. У меня было несколько идей, но я надеялся, что кто-то другой мог найти лучший метод.

1) Когда основное приложение загружается, первое, что оно делает, это проверяет предыдущую ошибку, а затем запускает утилиту режима восстановления.

Проблема в том, что если с приложением что-то не так, что вполне вероятно, то оно вообще не запустится.

2) Вместо основного приложения попросите пользователя запустить утилиту, которая проверит предыдущую ошибку, а затем либо запустит основное приложение, либо перейдет в режим восстановления.

Это решает проблему с первой идеей, однако целевые машины очень заблокированы, и могут возникнуть проблемы с развертыванием.

Существуют ли какие-либо другие стратегии реализации режима восстановления?

Спасибо


person Iain Hoult    schedule 14.07.2011    source источник
comment
Я думаю, вам следует выбрать вариант 2. Я не вижу других возможностей.   -  person Daniel Hilgarth    schedule 14.07.2011


Ответы (2)


Мы решили аналогичную ситуацию следующим образом:

  • сделать "утилиту режима восстановления" той, которая всегда запускается пользователем
  • в "утилите режима восстановления" проверьте, нужно ли какое восстановление делать (и если да, то делает ли)
  • когда либо восстановление не требуется, либо восстановление успешно завершено, утилита запускает реальное приложение

С .NET вы даже можете поместить оба в один EXE... например, с помощью ILMerge (бесплатная утилита) или путем встраивания реального приложения в качестве «встраиваемого ресурса» или с помощью какого-либо коммерческого инструмента...

Таким образом, для пользователя нет никакой разницы... а встроенный EXE-файл можно запустить из памяти (не нужно извлекать его в файловую систему), так что для пользователя это не имеет никакого значения, пока восстановление действительно не понадобится. .

ЕСЛИ нужны какие-то подсказки о том, как внедрить и/или запустить второй EXE-файл из памяти, дайте мне знать - у меня сейчас нет под рукой ссылок, но я мог бы их поискать.

person Yahia    schedule 14.09.2011

Дело в том, что если приложение дает сбой, может ли оно по-прежнему записывать, что оно не удалось и почему?

Поэтому я бы записал событие запуска приложения при запуске и событие закрытия приложения при закрытии. Затем приложение может автоматически перейти в режим восстановления, если оно не находит закрытое событие при запуске.

Я бы пошел с запуском основного приложения напрямую, но очень осторожно, как все инициализируется, чтобы приложение не вылетало при запуске.

person Shiraz Bhaiji    schedule 14.09.2011