Создание точек восстановления системы - мысли?

Это "табу" для программного создания точек восстановления системы? Я хотел бы сделать это, прежде чем выполнить обновление программного обеспечения. Если есть лучший способ создать точку восстановления только с файлами и данными моего программного обеспечения, пожалуйста, дайте мне знать.

Я хотел бы получить средство, с помощью которого я смогу вернуть пользователя в известное рабочее состояние, если во время обновления все идет не так (закрывает / убивает приложение обновления, отключается питание, пользователь отключает питание и т. Д.)

    private void CreateRestorePoint(string description)
    {
        ManagementScope oScope = new ManagementScope("\\\\localhost\\root\\default");
        ManagementPath oPath = new ManagementPath("SystemRestore");
        ObjectGetOptions oGetOp = new ObjectGetOptions();
        ManagementClass oProcess = new ManagementClass(oScope, oPath, oGetOp);

        ManagementBaseObject oInParams = oProcess.GetMethodParameters("CreateRestorePoint");
        oInParams["Description"] = description;
        oInParams["RestorePointType"] = 12; // MODIFY_SETTINGS
        oInParams["EventType"] = 100;

        ManagementBaseObject oOutParams = oProcess.InvokeMethod("CreateRestorePoint", oInParams, null); 
    }

6 ответов

Решение

Это "табу" для программного создания точек восстановления системы?

Нет. Вот почему есть API; так что вы можете иметь псевдоатомные обновления системы.

Хорошая идея или нет, зависит от того, сколько вы делаете. Полная точка восстановления системы является весомой - она ​​требует времени для создания, дискового пространства для хранения и добавляется в интерфейс точек восстановления, возможно вытесняя более ранние точки восстановления из хранилища.

Итак, если ваше обновление действительно изменяет только ваше приложение (то есть данные, которые оно хранит, двоичные файлы, из которых оно состоит, записи реестра для него), то это на самом деле не изменение уровня системы, и я бы проголосовал за отсутствие точки восстановления, Вы можете эмулировать функциональность, просто создав резервные копии изменяемых деталей и предложив вариант восстановления в резервную копию. Мое мнение таково, что System Restore должен восстанавливать систему при глобальных изменениях, которые могут ее повредить (установка приложения и т. Д.).

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

Нет, это не табу - на самом деле, я бы поощрял это. Операционная система управляет тем, сколько занимает жесткий диск, и я бы потратил деньги на то, чтобы Microsoft тратила больше денег и времени на тестирование восстановления системы, чем вы и деньги, которые вы тратите на тестирование своего установочного приложения.

Если вы разрабатываете приложение для Vista, вы можете использовать Transactional NTFS, которая поддерживает функцию, аналогичную той, которую вы ищете.

http://en.wikipedia.org/wiki/Transactional_NTFS

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

Наконец, Windows обычно автоматически создает точку восстановления при каждом запуске приложения установки.

Взгляните на следующую ссылку: http://www.calumgrant.net/atomic/

Автор описал "Транзакционное программирование". Это аналогично транзакциям в базах данных.

Пример:

Начать транзакцию:

  1. Шаг 1
  2. Шаг 2
  3. Ошибка на этапе 2
  4. Откат к до начала транзакции.

Это новый фреймворк, но вы можете рассматривать его скорее как решение, а не использовать фреймворк.

Используя транзакции, вы получаете "очки восстановления", которые вы ищете.

Я не думаю, что полное восстановление системы было бы хорошим планом. Две причины, которые быстро приходят на ум:

  • Потерянное дисковое пространство
  • Непреднамеренные последствия откатов
Другие вопросы по тегам