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


Рекомендации по приложениям

Приложения, работающие в Windows Vista и Windows Server 2008, должны соответствовать этим рекомендациям, чтобы диспетчер перезапуска смог завершить работу и перезапустить приложения, если это необходимо для установки обновлений. Службы могут использовать рекомендации, описанные в руководстве по службам.

  • Диспетчер перезапуска запрашивает завершение работы приложений с графическим интерфейсом, отправляя уведомление WM_QUERYENDSESSION , для которого параметру lParam задано значение ENDSESSION_CLOSEAPP (0x1). Приложения не должны завершать работу при получении сообщения WM_QUERYENDSESSION , так как другое приложение может быть не готово к закрытию. Приложения графического пользовательского интерфейса должны прослушивать сообщение WM_QUERYENDSESSION и возвращать значение TRUE , если приложение готово к завершении работы и перезапуску. Если приложение не возвращает значение FALSE, диспетчер перезапуска отправляет WM_ENDSESSION сообщение с параметром lParam, для параметра lParam задано значение ENDSESSION_CLOSEAPP (0x1), а для параметра wparamзначение TRUE. Приложения должны завершать работу только при получении сообщения 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 . Использование этих флагов гарантирует, что приложения, зарегистрированные для перезапуска, будут перезапущены после перезагрузки системы, что минимизирует влияние на пользователя.