删除修补程序
从 Windows Installer 版本 3.0 开始,可以创建和安装能够按任意顺序单独卸载的修补程序,而无需卸载再重新安装整个应用程序和其他修补程序。 Windows Installer 3.0 还允许使用包含修补程序排序信息的 MsiPatchSequence 表来创作修补程序包。 对于 3.0 以下的 Windows Installer 版本,从应用程序中删除特定修补程序的唯一方法是卸载整个已修补的应用程序,然后重新安装该应用程序,且不重新应用任何所要删除的修补程序。
修补程序是否可卸载取决于以下因素:修补程序的创作方式、用于安装修补程序的 Windows Installer 版本以及修补程序对应用程序所做的更改。 如果修补程序不可卸载,则删除修补程序的唯一方法是卸载整个应用程序并重新安装,且不应用所要删除的修补程序。
可以使用命令行选项、脚本界面或通过从其他应用程序调用 MsiRemovePatches 来卸载一个或多个修补程序。 有关如何卸载修补程序的详细信息,请参阅卸载修补程序。
MSIPATCHREMOVE 属性的值列出要卸载的修补程序。 对于列表中的每个修补程序,安装程序将验证它是否可卸载。 如果用户无权删除修补程序、产品无法识别修补程序、修补程序策略阻止删除,或者修补程序已标记为不可卸载,则安装程序将返回错误,指出安装事务失败。 有关哪些因素决定了修补程序是否不可卸载的详细信息,请参阅可卸载的修补程序。
验证修补程序可删除后,安装程序将从修补程序应用顺序中删除该修补程序。 有关 Windows Installer 3.0 如何确定修补程序应用顺序的详细信息,请参阅将修补程序排序。 请注意,从顺序中删除修补程序可能导致标记为过时或被取代的修补程序变为活动修补程序。
选择删除的所有修补程序全部列在 MsiPatchRemovalList 属性中。 此属性是安装程序设置的专用属性,可以在条件表达式中使用,也可以由自定义操作查询。 该属性包含要删除的修补程序的修补程序代码 GUID 列表。 自定义操作可以通过调用 MsiGetPatchInfoEx 或 Patch 对象的 PatchProperty 属性来确定修补程序的安装状态是已应用、过时还是被取代。
删除修补程序后,应用程序的状态与从未安装过修补程序一样。 如果可能,安装程序会将进程限制为要删除的修补程序所影响的功能子集。 安装程序会自动将 REINSTALL 属性设置为受影响功能的列表。 将删除修补程序添加的文件,并覆盖修补程序修改的文件。 文件和注册表项将还原到产品所需的版本,但修补程序不会还原。 修补程序添加的功能和组件将从应用程序中取消注册。 请注意,如果修补程序添加的其他内容已由另一个仍然适用的修补程序使用,则这些内容可能会保留在用户的计算机上。
如果共享组件的文件已被修补程序更新,则更改将影响共享该组件的所有应用程序。 删除修补程序后,更改同样会影响共享该组件的所有应用程序。 这意味着,一个应用程序删除修补程序可能会将共享组件的文件还原到比另一个应用程序所需版本更低的版本。 这可能会修复第一个应用程序,但会导致第二个应用程序停止工作。 在这种情况下,可以使用重新安装功能或应用程序中所述的方法,通过重新安装第二个应用程序来修复第二个应用程序。 这会还原文件的修补版本。
相关主题