使用 Windows Installer 和 Windows 资源保护

在 Windows Server 2008 及更高版本和 Windows Vista 及更高版本中安装基本系统文件、文件夹和注册表信息时,Windows Installer 遵守 Windows 资源保护 (WRP)。

Windows Server 2008 和 Windows Vista 中的 WRP 取代了 Windows Server 2003、Windows XP 和 Windows 2000 中的 Windows 文件保护 (WFP)。 Windows Installer 开发人员应注意 Windows Server 2008 及更高版本和 Windows Vista 及更高版本中安装程序对受保护资源的处理方式的以下更改:

  • 在 Windows Server 2008 及更高版本或 Windows Vista 及更高版本中运行时,Windows Installer 会跳过 WRP 保护的所有文件的安装,安装程序会在日志文件中输入警告,并继续进行安装的其余部分,且不显示错误。 在 Windows Server 2003、Windows XP 和 Windows 2000 中,当 Windows Installer 遇到 WFP 保护的文件时,安装程序会请求 WFP 安装该文件。
  • Windows Server 2008 及更高版本或 Windows Vista 及更高版本中的 WRP 可以保护注册表项和文件。 如果 Windows Installer 遇到 WRP 保护的注册表项,安装程序将跳过该注册表项的安装,安装程序会在日志文件中输入警告,并继续进行安装的其余部分,且不显示错误。
  • 请注意,如果 Windows Installer 组件包含 WRP 保护的文件或注册表项,则必须将此资源用作该组件的 KeyPath。 在这种情况下,Windows Installer 不会安装、更新或删除组件。 不应在安装包中包含任何受保护的资源。 应使用 Windows 资源保护支持的资源替换机制

有关 WRP 的详细信息,请参阅 Windows 资源保护Microsoft Technet 中提供的信息。

适用于 Windows Server 2003 和 Windows XP/2000 的 WFP

在 Windows Server 2003、Windows XP 和 Windows 2000 上安装基本系统文件时,Windows Installer 遵守 Windows 文件保护 (WFP)。 如果应用程序的无人参与安装修改了受保护的系统文件,则 WFP 会将该文件还原为经验证的文件版本。

Windows Installer 从不尝试安装或替换受保护的文件。 InstallFiles 操作或安排在 InstallFiles 之前的任何其他操作尝试在 Windows Server 2003、Windows XP 或 Windows 2000 上安装受保护的文件时,安装程序会调用 WFP 并请求安装或替换受保护的文件。 安装程序执行 InstallFiles 操作后立即从 WFP 请求文件安装。 WFP 安装用户系统上的文件,或将其替换为受保护文件的缓存版本。 请注意,这并不能保证从缓存中安装的文件版本是应用程序所需的版本。 WFP 安装文件后,安装程序会确定此版本是否与包中的版本匹配。 如果包中的文件版本高于安装的版本,安装程序会通知用户它无法更新系统,应用程序可能需要更新操作系统。

如果安排在 InstallFiles 之后的任何操作试图安装或替换系统上尚未安装的受保护文件,则安装程序无法调用 WFP 来安装该文件。 在这种情况下,安装程序会通知用户它无法更新系统,应用程序可能需要更新操作系统。

安装程序还会在删除文件时使用 WFP 进行检查,并且用不尝试删除受保护的系统文件。

受 WFP 保护的组件关键文件

请注意,如果 Windows Installer 组件包含 WFP 文件,则必须将此文件指定为该组件的密钥路径。

安装程序尝试在 Windows Server 2003、Windows XP 或 Windows 2000 上安装组件的密钥文件时,会首先调用 WFP 以确定密钥文件是否受到保护。 如果组件的密钥文件受 WFP 保护且已安装该密钥文件,则安装程序仅在包中的密钥文件的版本高于安装的版本时更新组件。 如果安装包指定应安装组件,而当前未安装该组件的密钥文件,则不管该密钥文件是否被保护,安装程序都会安装该组件。 安装任何具有受 WFP 保护的密钥文件的组件后,系统会永久性安装该组件,并且安装程序永远不会删除或替换该组件。

WFP 的程序集安装

面向程序集的 WFP 不同于面向系统文件的 WFP。

通过检测是否试图替换受保护的系统文件,WFP 可以保护 Windows Server 2003、Windows XP 和 Windows 2000 系统文件。 WFP 收到受保护目录中文件的目录更改通知后,将触发此保护。 WFP 收到此通知时,它将确定哪个文件发生了更改。 如果文件受保护,WFP 会在静态目录文件中查找文件签名,以确定新文件的版本是否正确。 如果文件版本不正确,系统会用缓存或分发媒体中的正确版本替换该文件。

相比之下,程序集的 WFP 是动态的。 将文件添加到共享的并行程序集缓存时,WFP 会扩展到这些文件。 如果程序集损坏,WFP 将请求安装程序替换该文件。 Windows Installer 可能会也可能不会替换该文件,具体取决于是否可以访问源包。 如果无法访问源包,WFP 将弹出一个对话框,声明它无法还原文件。

请注意,%windir%\winsxs 中安装的非托管共享并行程序集受 WFP 保护。 应用程序目录中安装的非托管专用程序集不受 WFP 保护。 应用程序目录或 %windir%\assembly\gac 中安装的托管全局程序集不受 WFP 保护。

Windows 资源保护