Рекомендации по приложениям
Приложения, работающие в Windows Vista и Windows Server 2008, должны соответствовать этим рекомендациям, чтобы убедиться, что диспетчер перезапуска может завершить работу и перезапустить приложения при необходимости для установки обновлений. Службы могут использовать рекомендации, описанные в руководствах по службам.
Диспетчер перезапуска запрашивает приложения ГРАФИЧЕСКОго интерфейса для завершения работы, отправив уведомление WM_QUERYENDSESSION с параметром lParam значение ENDSESSION_CLOSEAPP (0x1). Приложения не должны завершить работу при получении сообщения WM_QUERYENDSESSION, так как другое приложение может не быть готово к завершении работы. Приложения графического интерфейса должны прослушивать сообщение WM_QUERYENDSESSION и возвращать значение TRUE, если приложение готово к завершении работы и перезапуску. Если приложение не возвращает значение FALSE, диспетчер перезапуска отправляет сообщение WM_ENDSESSION с параметром lParam значение ENDSESSION_CLOSEAPP (0x1), а параметр wparamTRUE. Приложения должны завершить работу только при получении сообщения WM_ENDSESSION. Диспетчер перезапуска также отправляет WM_CLOSE сообщение для приложений графического интерфейса, которые не завершаются получением WM_ENDSESSION. Если любое приложение графического интерфейса отвечает на сообщение WM_QUERYENDSESSION, возвращая значение FALSE, завершение работы будет отменено. Однако при принудительном завершении работы приложение завершается независимо от того, что оно будет завершено.
Когда приложение ГРАФИЧЕСКОго интерфейса получает сообщение WM_ENDSESSION, приложение должно подготовиться к завершении работы в течение указанного периода ожидания. Как минимум, приложения должны подготовиться, сохраняя все данные пользователя и сведения о состоянии, необходимые после перезапуска. Рекомендуется периодически сохранять пользовательские данные и состояние приложений.
Диспетчер перезапуска отправляет уведомление CTRL_C_EVENT консольным приложениям, которые должны быть выключены и перезапущены. Когда консольное приложение получает уведомление CTRL_C_EVENT, приложение должно предпринять действия, необходимые для подготовки к завершению работы в течение указанного периода времени ожидания. По крайней мере консольные приложения должны определять функцию HandlerRoutine для обработки уведомления CTRL_C_EVENT и сохранять все пользовательские данные и сведения о состоянии, необходимые после перезапуска. Рекомендуется периодически сохранять пользовательские данные и состояние приложений.
Если какие-либо приложения не завершаются в ответ на сообщения о завершении работы, установщики могут использовать параметр RmForceShutdown функции RmShutdown, чтобы принудительно завершить работу приложений. Когда установщик указывает принудительное завершение работы, диспетчер перезапуска пытается полностью завершить работу приложений, отправив сообщения о завершении работы, но принудит их завершить работу, если это завершится ошибкой. Приложения графического интерфейса и консольные приложения могут быть вынуждены завершить работу, чтобы включить установку критического обновления системы безопасности. Так как это может привести к потере данных, приложения должны обрабатывать сообщения о завершении работы и завершать работу при необходимости.
Приложения должны регистрироваться для перезапуска с помощью функции RegisterApplicationRestart. Диспетчер перезапуска может перезапускать только приложения, зарегистрированные для перезапуска. Это единственный способ, которым диспетчер перезапуска может определить команду командной строки, которая будет использоваться при перезапуске приложения. Если приложение должно повторно открыться с сохраненным состоянием или данными, эта информация должна быть включена в команду командной строки, зарегистрированную для приложения.
Заметка
Если перезапущенное приложение должно работать в том же каталоге, в который он запущен, прежде чем завершить работу, приложение должно сохранить сведения о каталоге, а затем изменить его после перезапуска.
Заметка
Функция RmRestart не перезапускает приложения, которые не выполняются в качестве пользователя, вошедшего в систему. Например, функция RmRestart не перезапускает приложения, запущенные с командой запуска от имени, которая не выполняется в качестве пользователя, вошедшего в систему. Эти приложения должны быть перезапущены вручную.
Когда диспетчер перезапуска определяет, что для установки обновления требуется перезагрузка системы, она не завершает работу приложений и служб. Вместо этого он оставляет это установщику, чтобы решить, когда запланировать перезагрузку системы и установить обновление. Установщики могут снизить нарушение работы пользователей, вызванных обновлениями, требующими перезагрузки системы с помощью функции ExitWindowsEx с флагом EWX_RESTARTAPPS или функцией InitiateShutdown с флагом SHUTDOWN_RESTARTAPPS. С помощью этих флагов приложения, зарегистрированные для перезапуска, перезапускаются после перезагрузки системы, что позволяет свести к минимуму влияние на пользователя.