Завершение работы
Существует три способа завершения работы приложения на локальных или удаленных компьютерах:
- Завершение работы системы
- завершение работы системы и его перезапуск
- завершите работу приложения, завершите работу и перезапустите систему, а также перезапустите все приложения, зарегистрированные для перезапуска.
Чтобы завершить работу системы, используйте функцию ExitWindowsEx с флагом EWX_SHUTDOWN. Пример см. в статье Как завершить работу системы. Чтобы завершить работу и перезапустить систему, используйте флаг EWX_REBOOT. Чтобы перезапустить все приложения, зарегистрированные для перезапуска с помощью функции RegisterApplicationRestart, используйте флаг EXW_RESTARTAPPS.
Функции InitiateShutdown, InitiateSystemShutdownи InitiateSystemShutdownEx запускают таймер и отображают диалоговое окно, запрашивая у пользователя выход из системы. Пока отображается это диалоговое окно, функция abortSystemShutdown может остановить таймер и предотвратить завершение работы компьютера. Однако если срок действия таймера истекает, компьютер завершает работу. Эти функции также могут перезагрузить компьютер после операции завершения работы. Дополнительные сведения см. в разделе Отображение диалогового окна завершения работы.
Уведомления о завершении работы
Приложения с окном и очередью сообщений получают уведомления о завершении работы с помощью WM_QUERYENDSESSION и WM_ENDSESSION сообщений. Эти приложения должны возвращать TRUE, чтобы указать, что их можно завершить. Приложения не должны блокировать завершение работы системы, если это не обязательно. Приложения должны выполнять любую необходимую очистку при обработке WM_ENDSESSION. Приложения, имеющие несохраненные данные, могут сохранить данные во временном расположении и восстановить его при следующем запуске приложения. Рекомендуется, чтобы приложения часто сохраняли данные и состояние; Например, автоматически сохраняйте данные между операциями сохранения, инициированными пользователем, чтобы уменьшить объем данных, которые необходимо сохранить при завершении работы.
Консольные приложения получают уведомления о завершении работы в подпрограммах обработчика. Чтобы зарегистрировать обработчик консоли, используйте функцию SetConsoleCtrlHandler.
Приложения-службы получают уведомления о завершении работы в подпрограммах обработчика. Чтобы зарегистрировать обработчик управления службой, используйте функцию RegisterServiceCtrlHandlerEx.
Блокировка завершения работы
Если приложению необходимо заблокировать возможное завершение работы системы, оно может вызвать функцию ShutdownBlockReasonCreate. Объект, вызывающий функцию, предоставляет строку причины, которая будет отображена пользователю. Строка причины должна быть короткой и ясной, предоставляя пользователю информацию, необходимую для принятия решения о том, следует ли продолжать завершение работы системы.
Связанные разделы