Удаление исправлений
Начиная с установщика Windows версии 3.0, можно создавать и устанавливать исправления, которые можно удалять по отдельности и в любом порядке, без удаления и переустановки всего приложения и других исправлений. Установщик Windows 3.0 также позволяет создавать пакеты исправлений с помощью таблицы MsiPatchSequence , содержащей сведения о последовательности исправлений. В версиях установщика Windows, предшествующих установщику Windows 3.0, единственный способ удаления определенных исправлений из приложения — удалить все исправленное приложение, а затем переустановить без повторного применения исправлений.
Возможность удаления исправления зависит от того, как было создано исправление, от версии установщика Windows, используемой для установки исправления, и от изменений, внесенных исправлением в приложение. Если исправление невозможно удалить, единственным способом удаления исправления является удаление всего приложения и переустановка без применения удаляемого исправления.
Вы можете удалить одно или несколько исправлений с помощью параметра командной строки, интерфейса скрипта или вызова MsiRemovePatches из другого приложения. Дополнительные сведения об удалении исправлений см. в статье Удаление исправлений.
Значение свойства MSIPATCHREMOVE содержит список исправлений, которые необходимо удалить. Для каждого исправления в списке установщик проверяет возможность удаления исправления. Если у пользователя нет прав на удаление исправления, исправление неизвестно для продукта, политика исправлений предотвращает удаление или исправление было помечено как неудаляемое, установщик возвращает ошибку, указывающую на неудачную транзакцию установки. Дополнительные сведения о том, что определяет, невозможно ли удалить исправление, см. в разделе Об удалении исправлений.
После того как исправление будет проверено как съемный, установщик удаляет его из последовательности приложений исправлений. Дополнительные сведения о том, как установщик Windows 3.0 определяет, какую последовательность следует использовать при применении исправлений, см. в разделе Последовательность исправлений. Обратите внимание, что удаление исправлений из последовательности может привести к тому, что исправления, помеченные как устаревшие или замененные, станут активными.
Все исправления, выбранные для удаления, перечислены в свойстве MsiPatchRemovalList . Это свойство является частным свойством, которое задается установщиком и может использоваться в условных выражениях или запрашиваться с помощью пользовательских действий. Свойство содержит список идентификаторов GUID кода исправлений для удаляемых исправлений. Пользовательское действие может определить, применяется ли состояние установки исправления, является ли его устаревшим или замененным, путем вызова свойства MsiGetPatchInfoEx или PatchPropertyобъекта Patch.
После удаления исправления состояние приложения будет таким же, как если бы исправление никогда не устанавливалось. Если это возможно, установщик ограничивает процесс подмножеством функций, затронутых удалением исправления. Установщик автоматически задает для свойства REINSTALL список затронутых функций. Файлы, добавленные исправлением, удаляются, а файлы, измененные исправлением, перезаписываются. Файлы и записи реестра восстанавливаются до версии, ожидаемой продуктом, за исключением исправления. Функции и компоненты, добавленные исправлением, не зарегистрированы в приложении. Обратите внимание, что дополнительное содержимое, добавленное исправлением, может оставаться на компьютере пользователя, если содержимое используется другим исправлением, которое по-прежнему применимо.
Если файл общего компонента обновляется с помощью исправления, изменение затрагивает все приложения, которые совместно используют компонент. Когда исправление будет удалено, изменение затрагивает все приложения, которые совместно используют компонент. Это означает, что удаление исправления одним приложением может восстановить файл общего компонента до более низкой версии, чем требуется другому приложению. Это может исправить первое приложение, но привести к прекращению работы второго приложения. В этом случае второе приложение можно восстановить, переустановив второе приложение с помощью методов, описанных в разделе Переустановка компонента или приложения. Это приведет к восстановлению исправленной версии файла.