Функция 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, чтобы указать, что не отвечающие приложения и службы должны быть вынуждены завершить работу, если и только в том случае, если все приложения были зарегистрированы для перезапуска.
Значение | Значение |
---|---|
|
Принудительное завершение работы приложений и служб, не отвечающих на запросы, по истечении периода ожидания. Приложение, которое не отвечает на запрос на завершение работы, вынуждено завершить работу в течение 30 секунд. Служба, которая не отвечает на запрос на завершение работы, вынуждена завершить работу через 20 секунд. |
|
Завершайте работу приложений только в том случае, если все приложения были зарегистрированы для перезапуска с помощью функции RegisterApplicationRestart . Если какие-либо процессы или службы не могут быть перезапущены, никакие процессы или службы не завершаются. |
[in, optional] fnStatus
Указатель на функцию RM_WRITE_STATUS_CALLBACK , которая используется для передачи подробного состояния во время выполнения этой функции. Если значение РАВНО NULL, состояние не указано.
Возвращаемое значение
Это самая последняя полученная ошибка. Функция может возвращать один из кодов системных ошибок , определенных в Winerror.h.
Значение | Значение |
---|---|
|
Все операции завершения работы, перезапуска и обратного вызова были успешно завершены. |
|
Действия по завершению работы не выполнялись. Для завершения работы одного или нескольких процессов или служб требуется перезапуск системы. Этот код ошибки возвращается, когда диспетчер перезапуска обнаруживает, что перед завершением работы любого приложения требуется перезагрузка системы. |
|
Не удалось завершить работу некоторых приложений. AppStatusRM_PROCESS_INFO структур, возвращаемых функцией RmGetList, содержит обновленные сведения о состоянии. |
|
Это значение ошибки возвращается функцией RmShutdown при успешном выполнении запроса на отмену операции. |
|
Функции Диспетчер перезапуска не удалось получить мьютекс записи в реестре в отведенное время. Рекомендуется перезапустить систему, так как дальнейшее использование диспетчера перезапуска, скорее всего, завершится ошибкой. |
|
Один или несколько аргументов неверны. Это значение ошибки возвращается функцией Диспетчер перезапуска, если в параметре передается указатель NULL или 0, требующий ненулевого и ненулевого значения. |
|
Операции не удалось выполнить чтение или запись в реестр. |
|
Не удалось выполнить операцию диспетчера перезапуска, так как недостаточно памяти. |
|
Для предоставленного дескриптора не существует сеанса диспетчера перезапуска. |
Комментарии
Функция 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 |