删除修补程序

从 Windows Installer 版本3.0 开始,可以创建并安装可以按任意顺序单独卸载的修补程序,而无需卸载并重新安装整个应用程序和其他修补程序。 Windows Installer 3.0 还支持使用包含修补程序序列信息的MsiPatchSequence 表创作修补程序包。 对于早于 Windows Installer 3.0 的 Windows Installer 版本,从应用程序中删除特定修补程序的唯一方法是卸载整个已修补的应用程序,然后重新安装,而无需重新应用任何已删除的修补程序。

修补程序是否可以卸载取决于修补程序的编写方式、用于安装修补程序的 Windows Installer 的版本,以及修补程序对应用程序所做的更改。 如果修补程序不可卸载,则删除修补程序的唯一方法是卸载整个应用程序,然后重新安装,而不应用要删除的修补程序。

你可以使用命令行选项、脚本接口或从其他应用程序调用 MsiRemovePatches 来卸载一个或多个修补程序。 有关如何卸载修补程序的详细信息,请参阅 卸载修补程序

MSIPATCHREMOVE属性的值列出要卸载的修补程序。 对于列表中的每个修补程序,安装程序将验证修补程序是否已可卸载。 如果用户没有删除修补程序的权限,修补程序对于产品是未知的,修补程序策略阻止删除,或者修补程序被标记为 not 可卸载,则安装程序将返回一个错误,指出安装事务失败。 有关确定修补程序是否可卸载的详细信息,请参阅 可卸载补丁

将修补程序验证为可移动后,安装程序将从修补程序应用程序序列中删除修补程序。 有关 Windows Installer 3.0 如何确定在应用修补程序时要使用的序列的详细信息,请参阅对 修补程序进行序列化。 请注意,从序列中删除修补程序可能会导致标记为 "已过时" 或 "已取代" 的修补程序激活

选择要删除的所有修补程序都列在 MsiPatchRemovalList 属性中。 此属性是由安装程序设置的私有属性,可用于条件表达式或 自定义操作进行查询。 属性包含要删除的修补程序的修补程序代码 Guid 列表。 自定义操作可以通过调用 Patch 对象MsiGetPatchInfoExPatchProperty属性,来确定修补程序的安装状态是已应用、过时还是被取代。

删除修补程序后,应用程序的状态与从不安装修补程序的状态相同。 如果可能,安装程序会将进程限制为受要删除的修补程序影响的功能子集。 安装程序会自动将 " 重新安装 " 属性设置为受影响功能的列表。 将删除由修补程序添加的文件,并覆盖由修补程序修改的文件。 文件和注册表项将还原为产品所需的版本减去修补程序。 修补程序添加的功能和组件将从应用程序中注销。 请注意,如果仍适用其他修补程序,则修补程序添加的其他内容可能会保留在用户的计算机上。

如果某个共享组件的文件由修补程序更新,则更改将影响所有共享该组件的应用程序。 再次删除此修补程序时,更改将影响所有共享该组件的应用程序。 这意味着,通过一个应用程序删除修补程序可以将共享组件的文件还原到比其他应用程序所需的版本低的版本。 这可以修复第一个应用程序,但会导致第二个应用程序停止工作。 在这种情况下,第二个应用程序可以通过使用 重新安装功能或应用程序中描述的方法来重新安装第二个应用程序进行修复。 这将还原该文件的修补版本。

MsiEnumapplicationsEx

MsiGetPatchInfoEx

MSIPATCHREMOVE

MsiRemovePatches

修补程序排序

修补卸载自定义操作

可卸载修补程序

卸载修补程序