rmShutdown 函数 (restartmanager.h)

启动应用程序的关闭。 只能从使用 RmStartSession 函数启动重启管理器会话的安装程序调用此函数。

语法

DWORD RmShutdown(
  [in]           DWORD                    dwSessionHandle,
  [in]           ULONG                    lActionFlags,
  [in, optional] RM_WRITE_STATUS_CALLBACK fnStatus
);

参数

[in] dwSessionHandle

现有 Restart Manager 会话的句柄。

[in] lActionFlags

配置组件的关闭 一个或多个RM_SHUTDOWN_TYPE选项。 OR 运算符可以组合以下值,以指定当且仅当所有应用程序都已注册重启时,才会强制关闭无响应的应用程序和服务。

含义
RmForceShutdown
0x1
强制在超时期限后关闭无响应的应用程序和服务。 未响应关闭请求的应用程序在 30 秒内被迫关闭。 不响应关闭请求的服务在 20 秒后被迫关闭。
RmShutdownOnlyRegistered
0x10
仅当已使用 RegisterApplicationRestart 函数注册所有应用程序以重启时,才关闭应用程序。 如果无法重启任何进程或服务,则不会关闭任何进程或服务。

[in, optional] fnStatus

指向 RM_WRITE_STATUS_CALLBACK 函数的指针,该函数在执行时用于传达详细状态。 如果 为 NULL,则不提供任何状态。

返回值

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

含义
ERROR_SUCCESS
0
所有关闭、重启和回调操作均已成功完成。
ERROR_FAIL_NOACTION_REBOOT
350
未执行任何关闭操作。 一个或多个进程或服务需要重启系统才能关闭。 当重启管理器检测到在关闭任何应用程序之前需要重启系统时,将返回此错误代码。
ERROR_FAIL_SHUTDOWN
351
某些应用程序无法关闭。 RmGetList 函数返回的RM_PROCESS_INFO结构的 AppStatus 包含更新的状态信息。
ERROR_CANCELLED
1223
当取消操作的请求成功时, RmShutdown 函数将返回此错误值。
ERROR_SEM_TIMEOUT
121
Restart Manager 函数无法在分配的时间内获取注册表写入互斥体。 建议系统重启,因为进一步使用重启管理器可能会失败。
ERROR_BAD_ARGUMENTS
160
一个或多个参数无效。 如果在需要非 null 和非零值的参数中传递 NULL 指针或 0,则重启管理器函数将返回此错误值。
ERROR_WRITE_FAULT
29
操作无法读取或写入注册表。
ERROR_OUTOFMEMORY
14
无法完成重启管理器操作,因为没有足够的内存可用。
ERROR_INVALID_HANDLE
6
提供的句柄不存在 Restart Manager 会话。

注解

RmShutdown 函数调用 RmGetList 并更新当前使用已注册资源的进程列表,然后再尝试关闭任何进程。 然后,RmShutdown 函数会尝试使用最新列表中的已注册资源关闭进程。 RmShutdown 函数使用详细状态信息更新 RmGetList 函数返回的 RM_PROCESS_INFO 结构的 AppStatus 成员。

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

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

要求

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

另请参阅

RegisterApplicationRestart

RmCancelCurrentTask

RmRestart