Msiexec: автоматический откат к предыдущей версии при сбое установки
При установке MSI-файла с использованием msiexec в режиме без вывода сообщений можно ли автоматизировать его так, чтобы при сбое установки он выполнял откат к предыдущей версии? Предполагая, что при установке более старая версия приложения уже установлена.
3 ответа
Да, восстановление старой версии приложения с помощью отката после сбоя установки на самом деле является встроенной функцией установщика Windows, но вам необходимо правильно настроить его, чтобы он работал так, как вам нужно.
Откат установщика Windows будет работать по вашему запросу, если вы используете: 1) незначительное обновление или 2) правильно упорядоченное крупное обновление, которое удаляет более старые версии после успешного обновления всех файлов. Если основное обновление настроено на удаление старой версии перед установкой новой, откат недоступен, поскольку деинсталляция уже завершена, и, следовательно, новый установщик ничего не оставит установленным, если произойдет сбой и произойдет откат.
Важное замечание: Для незначительных обновлений и для поздней деинсталляции старой версии в основных обновлениях для правильной работы все правила компонентов MSI должны точно соблюдаться на 100%.
Размышляя о серьезном обновлении, которое удаляет старую версию после обновления, вы можете рассматривать ее как операцию исправления, не имея обновления, упакованного как исправление. Установщик Windows фактически запустит diff для старой и новой версии, а затем внесет только необходимые изменения, оставив остальную часть приложения без изменений. В зависимости от структуры приложения и количества файлов, это также может быть значительно быстрее для установки.
Поздние крупные обновления также позволяют предотвратить возврат файлов конфигурации к исходному состоянию установки во время обновлений. Это классическая проблема, при которой файлы конфигурации изменяются после установки, удаляются во время крупного обновления, а затем переустанавливаются, создавая впечатление, что они возвращаются, когда они фактически заново установлены.
Я писал об откате установщика Windows раньше. Может быть стоит прочитать.
Существует возможность, но она предполагает изменение последовательности обновления, что не всегда легко осуществить. Вы должны переместить RemoveExistingProducts после действия InstallExecute.
http://msdn.microsoft.com/en-us/library/windows/desktop/aa371197(v=vs.85).aspx
Нет, это невозможно. Основное обновление удаляет старую версию перед установкой новой. Поэтому, когда новая установка завершается неудачно, старая версия уже удалена.