可卸载修补程序

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

要想卸载通过 Windows Installer 3.0 版应用的修补程序,可以使用命令行选项MsiRemovePatches 函数或 RemovePatches 方法调用,如卸载修补程序一节中所述。 Windows Installer 验证 MSIPATCHREMOVE 属性中列出的要删除的每个修补程序是否可卸载。 如果用户没有删除修补程序的权限,则产品无法识别修补程序,修补程序策略阻止移除,或者修补程序被标记为不可卸载,安装程序将返回错误,指示安装事务失败。

Windows Installer 2.0:不支持。 使用早于 Windows Installer 3.0 的 Windows Installer 版本应用的修补程序不可卸载。

不可卸载的修补程序

在以下情况下,应用于已安装应用程序的修补程序(.msp 文件)无法卸载。 要移除不可卸载的修补程序,唯一方法是卸载已进行修补的应用程序,然后重新安装该应用程序,而不重新应用修补程序。 在这种情况下,必须重新应用不希望从应用程序中移除的任何修补程序。

  • 使用早于 Windows Installer 3.0 的 Windows Installer 版本应用的修补程序不可卸载。

  • 如在安装应用程序的计算机中,管理员设置了 DisablePatchUninstall 策略,则对此类应用程序应用的修补程序不可卸载。 设置此计算机策略后,即使管理员也无法卸载计算机上的修补程序。

  • 其数据库中没有 MsiPatchMetadata 表的修补程序不可卸载。

  • 在其 MsiPatchMetadata 表中不包含以下行的修补程序不可卸载。 如果修补程序的 Company、Property 和 Value 属性是默认值以外的值,则修补程序无法卸载。

    Company 属性 “值”
    {Null} AllowRemoval 1

     

  • 已将修补程序应用于应用程序中,但在安装此应用程序的上下文中,用户没有足够权限来卸载修补程序。 下表中的“不允许”一词表示管理员或非管理员用户无法从此上下文中安装的修补程序的应用程序卸载修补程序。 此表中的“允许”一词表示权限不会阻止管理员或非管理员用户卸载修补程序,但由于本部分中讨论的任何其他原因,可能仍无法卸载修补程序。

    应用程序安装上下文 管理员卸载修补程序 非管理员卸载修补程序
    每计算机 允许 一般不允许 唯一例外情况:使用 (LUA) 修补应用了修补程序。 标记为 LUA 修补程序的修补程序可由管理员或非管理员卸载。 LUA 修补程序仅适用于从媒体、按计算机安装的包,并且需要特殊创作。
    对于当前用户为每用户、非托管 允许 允许
    对于其他用户为每用户、非托管 不允许 不允许
    对于当前用户为每用户、托管 允许 不允许
    对于其他用户为每用户、托管 不允许 不允许

     

  • 修补程序应用的主要升级不可卸载。 应用程序的主要升级应通过安装升级的应用程序(.msi 文件)来执行,而不是通过安装修补程序来执行。

  • 应用于管理安装的修补程序不可卸载。 不建议修补管理安装。 用户从管理映像安装应用程序后,应在用户的计算机上应用当前修补程序集。 这可以防止用户计算机上缓存的包代码与管理安装上的包代码不同。 如果用户计算机上缓存的包代码与管理安装上的包代码不同,请从管理安装重新安装应用程序,然后修补客户端计算机。

  • 当修补程序向以下列表中的任何表添加新内容时,Windows Installer 会将修补程序标记为不可卸载。 通过将新行添加到未包含在此列表中的数据库表中,可卸载的修补程序可以将新文件、程序集、注册表项、组件或功能添加到安装中。

修补程序序列化

移除修补程序

卸载修补程序

修补程序卸载自定义操作

MSIPATCHREMOVE

MsiEnumapplicationsEx

MsiGetPatchInfoEx

MsiRemovePatches