Завершает работу

Существует три способа завершения работы приложения на локальных или удаленных компьютерах:

  • завершение работы системы
  • завершение работы системы и ее перезапуск
  • завершите работу приложения, завершите работу и перезапустите систему, а также перезапустите все приложения, зарегистрированные для перезапуска.

Чтобы завершить работу системы, используйте функцию ExitWindowsEx с флагом EWX_SHUTDOWN. Пример см. в разделе Завершение работы системы. Чтобы завершить работу и перезапустить систему, используйте флаг EWX_REBOOT. Чтобы перезапустить все приложения, зарегистрированные для перезапуска с помощью функции RegisterApplicationRestart , используйте флаг EXW_RESTARTAPPS.

Функции InitiateShutdown, InitiateSystemShutdown и InitiateSystemShutdownEx запускают таймер и отображают диалоговое окно с запросом на выход пользователя. Пока отображается это диалоговое окно, функция AbortSystemShutdown может остановить таймер и предотвратить завершение работы компьютера. Однако если срок действия таймера истекает, компьютер завершает работу. Эти функции также могут перезагрузить компьютер после завершения работы. Дополнительные сведения см. в разделе Отображение диалогового окна завершения работы.

Уведомления о завершении работы

Приложения с окном и очередью сообщений получают уведомления о завершении работы через сообщения WM_QUERYENDSESSION и WM_ENDSESSION . Эти приложения должны возвращать значение TRUE , чтобы указать, что они могут быть завершены. Приложения не должны блокировать завершение работы системы, если это не является абсолютно необходимым. Приложения должны выполнять необходимую очистку во время обработки WM_ENDSESSION. Приложения, которые имеют несохраненные данные, могут сохранять данные во временном расположении и восстанавливать их при следующем запуске приложения. Рекомендуется, чтобы приложения часто сохраняли данные и состояние; Например, автоматически сохранять данные между операциями сохранения, инициированными пользователем, чтобы уменьшить объем данных, сохраняемых при завершении работы.

Консольные приложения получают уведомления о завершении работы в подпрограммах обработчика. Чтобы зарегистрировать обработчик консоли, используйте функцию SetConsoleCtrlHandler .

Приложения-службы получают уведомления о завершении работы в подпрограммах обработчика. Чтобы зарегистрировать обработчик управления службой, используйте функцию RegisterServiceCtrlHandlerEx .

Блокировка завершения работы

Если приложение должно блокировать возможное завершение работы системы, оно может вызвать функцию ShutdownBlockReasonCreate . Вызывающий объект предоставляет строку причины, которая будет отображаться пользователю. Строка причины должна быть короткой и ясной, предоставляя пользователю информацию, необходимую для принятия решения о продолжении завершения работы системы.

Завершение работы системы