rmRestart 函数 (restartmanager.h)

重启已由 RmShutdown 函数关闭且已注册为使用 RegisterApplicationRestart 函数重启的应用程序和服务。 此函数只能由调用 RmStartSession 函数的主安装程序调用,以启动重启管理器会话。

语法

DWORD RmRestart(
  [in]           DWORD                    dwSessionHandle,
                 DWORD                    dwRestartFlags,
  [in, optional] RM_WRITE_STATUS_CALLBACK fnStatus
);

参数

[in] dwSessionHandle

现有重启管理器会话的句柄。

dwRestartFlags

保留。 此参数应为 0。

[in, optional] fnStatus

指向状态消息回调函数的指针,该函数用于在 RmRestart 函数运行时传达状态。 如果 为 NULL,则不提供状态。

返回值

这是收到的最新错误。 函数可以返回 Winerror.h 中定义的 系统错误代码 之一。

含义
ERROR_REQUEST_OUT_OF_SEQUENCE
776
如果在调用 RmShutdown 函数之前使用有效的会话句柄调用 RmRestart 函数,则返回此错误值。
ERROR_FAIL_RESTART
352
无法重启一个或多个应用程序。 RmGetList 函数返回的RM_PROCESS_INFO结构包含更新的状态信息。
ERROR_SEM_TIMEOUT
121
重启管理器函数无法在分配的时间内获取注册表写入互斥体。 建议重启系统,因为进一步使用重启管理器可能会失败。
ERROR_CANCELLED
1223
当取消操作的请求成功时, RmRestart 函数将返回此错误值。
ERROR_BAD_ARGUMENTS
160
一个或多个参数无效。 如果在需要非 null 和非零值的参数中传递 NULL 指针或 0,则重启管理器函数将返回此错误值。
ERROR_WRITE_FAULT
29
操作无法读取或写入注册表。
ERROR_OUTOFMEMORY
14
重启管理器操作无法完成,因为没有足够的内存可用。
ERROR_INVALID_HANDLE
6
提供的句柄不存在重启管理器会话。
ERROR_SUCCESS
0
函数成功并返回 。

注解

调用 RmRestart 函数后,RmGetList 函数返回的RM_PROCESS_INFO结构包含更新的状态信息。

重启管理器遵循分隔不同用户或终端会话的权限。 作为具有 LocalSystem 特权的服务运行的安装程序无法关闭或重启其他用户或终端会话中的任何应用程序。 安装程序应实现自定义方法来关闭和重启在其他会话中运行的应用程序。 一种方法是在另一个会话中启动新的安装程序进程,以执行关闭和重启操作。

当重新启动管理器关闭并重启控制台应用程序时,应用程序在新控制台中重启。

即使 RmShutdown 函数返回指示并非所有应用程序和服务都可以关闭的错误,安装程序也应始终使用 RmRestart 函数重启应用程序和服务。

RmRestart 函数不会重启使用提升的权限运行的任何应用程序。 即使应用程序已由重启管理器关闭。

RmRestart 函数不会重启任何未以当前登录用户身份运行的应用程序。 即使应用程序已由重启管理器关闭。 例如, RmRestart 函数不会重启使用 运行方式 命令启动的应用程序,这些应用程序不以当前登录的用户身份运行。 必须手动重启这些应用程序。

要求

要求
最低受支持的客户端 Windows Vista [仅限桌面应用]
最低受支持的服务器 Windows Server 2008 [仅限桌面应用]
目标平台 Windows
标头 restartmanager.h
Library Rstrtmgr.lib
DLL Rstrtmgr.dll

另请参阅

RegisterApplicationRestart

RmCancelCurrentTask

RmShutdown