将 Windows Installer 与重新启动管理器配合使用

使用 Windows Installer 4.0 在 Windows Vista 上进行安装和维护的应用程序会自动使用重启管理器来减少系统重启次数。 Windows Vista 上的默认行为是关闭应用程序,而不是尽可能关闭并重启操作系统。 在系统重启不可避免的情况下,安装程序可以使用重启管理器 API 来计划重启,从而最大程度地减少对用户工作流的中断。

Windows Installer 开发人员可以执行以下操作来准备其包,以使用重启管理器

  • MsiRMFilesInUse 对话框添加到包。 如果包中存在 MsiRMFilesInUse 对话框,则会为在完整 UI 用户界面级别运行安装的 Windows Vista 用户提供自动关闭和重启应用程序的选项。 安装包可以包含 MsiRMFilesInUse 对话框和 FilesInUse 对话框的信息。 仅当在 Windows Vista 上至少使用 Windows Installer 4.0 安装了包时,才会显示 MsiRMFilesInUse 对话框。 没有 MsiRMFilesInUse 对话框的现有包继续使用 FilesInUse 对话框运行。 自定义转换可用于将 MsiRMFilesInUse 对话框添加到现有包。

    最终用户通常在完整 UI 用户界面级别运行安装。 基本 UI 或精简 UI 级别安装为用户提供了使用重启管理器来减少系统重启次数的选项,即使 MsiRMFilesInUse 对话框不存在也是如此。 无提示 UI 级别安装始终关闭应用程序和服务,而在 Windows Vista 上,始终使用重启管理器。

  • 使用 RegisterApplicationRestart 函数注册应用程序以要求重启。 重启管理器只能重启已注册重启的应用程序。 重启管理器在安装后重启已注册的应用程序。 如果安装需要重启系统,重启管理器在系统重启后会重启已注册的应用程序。

  • 使用 MsiSetExternalUIMsiSetExternalUIRecord 函数启用外部用户界面处理程序时,指定 InstallLogMode_RMFileSinUse。 Windows Installer 将为支持重启管理器的外部用户界面处理程序发送 INSTALLMESSAGE_RMFILESINUSE 消息。 如果没有注册或内部用户界面处理 INSTALLMESSAGE_RMFILESINUSE 消息,安装程序会为支持 FilesInUse 对话框的用户界面处理程序发送 INSTALLMESSAGE_FILESINUSE 消息。 有关详细信息,请参阅在外部 UI 中使用重启管理器

  • 自定义操作可以添加属于重启管理器会话的资源。 应在 InstallValidate 操作之前对自定义操作进行排序。 自定义操作可以使用 MsiRestartManagerSessionKey 属性获取会话密钥,并且应调用重启管理器 API 的 RmJoinSessionRmEndSession 函数。 自定义操作无法移除属于重启管理器会话的资源。 自定义操作不应尝试使用 RmShutdownRmGetListRmRestart 函数关闭或重启应用程序。

  • 包作者可以将 LaunchCondition 表中的条件基于 MsiSystemRebootPending 属性,以防止在系统重启挂起时安装其包。

  • 包作者和管理员可以使用 MSIRESTARTMANAGERCONTROLMSIDISABLERMRESTARTMSIRMSHUTDOWN 属性和 DisableAutomaticApplicationShutdown 策略来控制 Windows Installer 和重启管理器的交互。

  • 应用程序和服务应遵循重启管理器文档的使用重启管理器一节中所述的准则。