Поделиться через


Функция RmShutdown (restartmanager.h)

Инициирует завершение работы приложений. Эту функцию можно вызвать только из установщика, который запустил сеанс диспетчера перезапуска с помощью функции RmStartSession .

Синтаксис

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

Параметры

[in] dwSessionHandle

Дескриптор существующего сеанса диспетчера перезапуска.

[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
Не удалось завершить работу некоторых приложений. AppStatusRM_PROCESS_INFO структур, возвращаемых функцией RmGetList, содержит обновленные сведения о состоянии.
ERROR_CANCELLED
1223
Это значение ошибки возвращается функцией RmShutdown при успешном выполнении запроса на отмену операции.
ERROR_SEM_TIMEOUT
121
Функции Диспетчер перезапуска не удалось получить мьютекс записи в реестре в отведенное время. Рекомендуется перезапустить систему, так как дальнейшее использование диспетчера перезапуска, скорее всего, завершится ошибкой.
ERROR_BAD_ARGUMENTS
160
Один или несколько аргументов неверны. Это значение ошибки возвращается функцией Диспетчер перезапуска, если в параметре передается указатель NULL или 0, требующий ненулевого и ненулевого значения.
ERROR_WRITE_FAULT
29
Операции не удалось выполнить чтение или запись в реестр.
ERROR_OUTOFMEMORY
14
Не удалось выполнить операцию диспетчера перезапуска, так как недостаточно памяти.
ERROR_INVALID_HANDLE
6
Для предоставленного дескриптора не существует сеанса диспетчера перезапуска.

Комментарии

Функция RmShutdown вызывает RmGetList и обновляет список процессов, использующих зарегистрированные ресурсы, прежде чем пытаться завершить работу каких-либо процессов. Затем функция RmShutdown пытается завершить процессы, используя зарегистрированные ресурсы в самом актуальном списке. Функция RmShutdown обновляет элемент AppStatusRM_PROCESS_INFO структур, возвращаемых функцией RmGetList , подробными сведениями о состоянии.

Диспетчер перезапуска учитывает привилегии, которые разделяют разные сеансы пользователя или терминала. Установщик, работающий как служба с привилегиями LocalSystem, не может завершить работу или перезапустить приложения в другом пользователе или сеансе терминала. Установщики должны реализовывать пользовательские методы для завершения работы и перезапуска приложений, запущенных в других сеансах. Один из способов — запустить новый процесс установщика в другом сеансе для выполнения операций завершения работы и перезапуска.

Установщики всегда должны перезапускать приложения и службы с помощью функции RmRestart , даже если функция RmShutdown возвращает ошибку, указывающую на то, что не все приложения и службы могут быть завершены.

Требования

Требование Значение
Минимальная версия клиента Windows Vista [только классические приложения]
Минимальная версия сервера Windows Server 2008 [только классические приложения]
Целевая платформа Windows
Header restartmanager.h
Библиотека Rstrtmgr.lib
DLL Rstrtmgr.dll

См. также раздел

RegisterApplicationRestart

RmCancelCurrentTask

RmRestart