7

В Windows есть команда shutdown /t для выключения или перезагрузки компьютера после определенной задержки. Ожидание завершения работы может быть прервано с помощью shutdown /a .

Но как я могу определить, когда и когда завершение работы в данный момент находится в режиме ожидания или запланировано, не прерывая его?

2 ответа2

8

Как я могу определить, находится ли ожидающее или запланированное завершение работы в данный момент без прерывания?

Я не думаю, что можно определить, когда произойдет отключение.

Вы можете определить, запланировано ли отключение, используя следующий алгоритм:

  1. Запустите "тестовое" отключение, используя shutdown /t xxx с большим значением для времени.

    • Для Windows 7 или более поздней максимально допустимое время было увеличено с 600 секунд до 315 360 000 секунд (10 лет)
  2. Если уже есть ожидающее завершение работы, то shutdown /t xxx завершится ошибкой с уровнем ошибки 1190:

    Выключение системы уже запланировано. (1190)

  3. Если вы не получили вышеуказанную ошибку, то знаете, что ранее не было запланировано завершение работы, поэтому вам нужно удалить "тестовое" завершение работы с помощью shutdown /a .

Выше может быть сделано в пакетном файле:

@echo off
rem perform a "test" shutdown with a large time
shutdown /t 999999
rem if there is already a shutdown pending then %ERRORLEVEL% will be 1190
if %ERRORLEVEL% equ 1190 (
  echo A shutdown is pending
  ) else (
  rem cancel the "test" shutdown
  shutdown /a
  echo No shutdown is pending
  )

Замечания:

  • Я не тестировал вышеупомянутый пакетный файл, так как не хочу сейчас выключать компьютер.

Дальнейшее чтение

0

Более сложный способ узнать, запланировано ли завершение работы, состоит в отладке winlogon.exe и проверке состояния флага ShutdownInProgress. Вам понадобятся средства отладки для Windows.

Я не пробовал, но этот пост в блоге MSDN объясняет, что происходит за кулисами, когда Windows выключается и как отлаживать winlogon.exe (который является процессом ядра). Команда отладчика для получения статуса флага выглядит так:

dd winlogon!ShutdownInProgress l 1
01062b3c  00000000

Если вы знаете, как отлаживать процессы ядра в Windows, вы можете попробовать это. Это руководство для начинающих по отладке с помощью CDB и NTSD может помочь.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .