应用程序指南
在 Windows Vista 和 Windows Server 2008 上运行的应用程序应遵守这些准则,以确保重启管理器可以根据需要关闭并重启应用程序以安装更新。 服务可以使用服务指南中所述 的准则。
重启管理器通过发送 lParam参数设置为ENDSESSION_CLOSEAPP (0x1) 的WM_QUERYENDSESSION通知来查询 GUI 应用程序关闭。 应用程序在收到 WM_QUERYENDSESSION 消息时不应关闭,因为其他应用程序可能尚未准备好关闭。 如果准备关闭并重启应用程序,GUI 应用程序应侦听 WM_QUERYENDSESSION 消息并返回 TRUE 值。 如果没有应用程序返回 FALSE 值,重启管理器将发送 一条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 函数,减少因需要系统重启的更新对用户的 中断 。 使用这些标志可确保注册重启的应用程序在系统重新启动后重启,从而最大程度地减少对用户的影响。