应用程序指南
在 Windows Vista 和 Windows Server 2008 上运行的应用程序应遵循以下准则,以确保重启管理器可以根据需要关闭和重启应用程序以安装更新。 服务可以使用 服务指南中所述的准则。
重启管理器通过发送 lParam 参数设置为 ENDSESSION_CLOSEAPP(0x1)的 WM_QUERYENDSESSION 通知来查询 GUI 应用程序进行关闭。 应用程序在收到 WM_QUERYENDSESSION 消息时不应关闭,因为其他应用程序可能尚未准备好关闭。 如果应用程序已准备好关闭并重启,GUI 应用程序应侦听 WM_QUERYENDSESSION 消息,并返回 true 值 TRUE。 如果没有应用程序返回值为 FALSE,则 Restart Manager 将发送一条 WM_ENDSESSION 消息,其中 lParam 参数设置为 ENDSESSION_CLOSEAPP (0x1), wparam 参数设置为 TRUE。 仅当应用程序收到 WM_ENDSESSION 消息时,应用程序才会关闭。 重启管理器还会为不关闭接收 WM_ENDSESSION的 GUI 应用程序发送 WM_CLOSE 消息。 如果任何 GUI 应用程序通过返回 FALSE的值来响应 WM_QUERYENDSESSION 消息,则会取消关闭。 但是,如果强制关闭,则不管怎样,应用程序都会终止。
当 GUI 应用程序收到 WM_ENDSESSION 消息时,应用程序应准备在指定的超时期限内关闭。 应用程序应至少通过保存重启后所需的任何用户数据和状态信息来准备。 建议应用程序定期保存用户数据和状态。
重启管理器将 CTRL_C_EVENT 通知发送到必须关闭和重启的控制台应用程序。 当控制台应用程序收到 CTRL_C_EVENT 通知时,应用程序应采取必要的作,以便在指定的超时期内准备关闭。 至少,控制台应用程序应定义一个 HandlerRoutine 函数来处理 CTRL_C_EVENT 通知,并应保存重启后需要的任何用户数据和状态信息。 建议应用程序定期保存用户数据和状态。
如果任何应用程序未关闭以响应关闭消息,安装程序可以使用 RmShutdown 函数的 RmForceShutdown 选项强制关闭应用程序。 当安装程序指定强制关闭时,重启管理器会尝试通过发送关闭消息来彻底关闭应用程序,但如果失败,将强制关闭它们。 可以强制关闭 GUI 应用程序和控制台应用程序,以启用关键安全更新的安装。 由于这可能会导致数据丢失,因此应用程序应在需要时处理关闭消息并彻底关闭。
应用程序应使用 RegisterApplicationRestart 函数注册重启。 重启管理器只能重启已注册重启的应用程序。 这是重启管理器确定重启应用程序时要使用的命令行命令的唯一方法。 如果应用程序必须重新打开一些已保存的状态或数据,则必须在为应用程序注册的命令行命令中包含该信息。
注意
如果重启的应用程序必须在关闭之前运行的同一目录中运行,则应用程序必须保存目录信息,然后在重新启动后更改为目录。
注意
RmRestart 函数不会重启未作为当前登录用户运行的应用程序。 例如,RmRestart 函数不会重启以 运行方式 命令启动的应用程序,该命令不会作为当前登录的用户运行。 必须手动重启这些应用程序。
当重启管理器确定安装更新需要系统重启时,它不会关闭任何应用程序和服务。 相反,它会将此项留给安装程序,以决定何时计划系统重启并安装更新。 安装程序可以使用具有 EWX_RESTARTAPPS 标志的 ExitWindowsEx 函数或具有 SHUTDOWN_RESTARTAPPS 标志的 InitiateShutdown 函数,减少因需要系统重启的更新而导致的用户中断。 使用这些标志可确保在系统重新启动后重启注册的应用程序重启,从而最大程度地减少对用户的影响。