5

Можно ли определить, была ли введена команда выключения (через меню «Пуск» пользователем или любой другой программой, запущенной на компьютере или имеющей удаленный доступ к компьютеру), а затем отменить ее?
В качестве альтернативы, можно ли настроить реестр так, чтобы Windows отображала таймер выключения всякий раз, когда выдается команда выключения, чтобы мы могли отключить ее?

3 ответа3

4

Да и (в основном) нет.

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

Скрипт / приложение может затем отследить завершение работы и спросить вас, хотите ли вы выйти из скрипта / приложения, в котором вы можете отменить. Это позволит предотвратить машину от закрытия, но это не будет мешать другим приложения и , возможно , услуги от быть прекращены.

Вам даже не нужен скрипт для этого, вы можете просто открыть блокнот и ввести текст. Поскольку у вас есть несохраненные данные в блокноте, Windows будет ждать и спросить, хотите ли вы продолжить выключение, предоставляя вам возможность отменить. Опять же, это будет работать, только если вы инициировали отключение локально.

Существует событие WMI Win32_ComputerShutdownEvent , которое происходит, когда компьютер выключается с помощью удаленной команды. Тем не менее, он может только получить это событие. Когда событие получено, локальный компьютер прекратит выполнение сценария при доставке события.

1

Я также надеюсь найти способ сделать это, чтобы у postgreSQL было достаточно времени для правильного завершения работы до его завершения, но в данный момент он выглядит не очень обнадеживающим.

В основном это просто повторение ответов других, но я попробовал эти две команды из командной строки Windows 7:

  1. shutdown /s & shutdown /a
  2. shutdown /s /t 0 & shutdown /a

Первая команда успешно прервала завершение работы, как и ожидалось, а вторая - нет. Это доказывает утверждение Келтари о немедленном отключении, которое невозможно прервать с помощью shutdown /a .

1

Это для Windows 7 (в корпоративной среде): если администратор инициировал удаленное выключение (shutdown /m PCName), Windows 7 должна отобразить уведомление о том, что ПК получает инструкцию на выключение / перезагрузку, и дать вам обратный отсчет.

Пользователь, сидящий за ПК, МОЖЕТ отменить его, предполагая, что у пользователя также есть права администратора на машине, выполнив:

shutdown /a

отменить любое существующее завершение работы.

Но, конечно, это спорный вопрос, если администратор поставил таймер на 1 секунду или немедленное отключение.

Windows 8 - Вы получите уведомление в системном трее (когда будет выполнено отключение) о том, что Windows собирается закрыть через xxx минут, и отключение произойдет в xxx время / дата. И я полагаю, что через 1 минуту до выключения Windows 8 будет отображать полноэкранное уведомление о том, что вы будете выключены через 60 секунд, и вам действительно нужно нажать кнопку «Закрыть», чтобы подтвердить сообщение.

Windows XP - я полагаю, что он также покажет таймер, но я не могу подтвердить, так как у меня нет машины WinXP для тестирования.

Опять же, вы можете отменить все «запланированные» выключения с помощью приведенной выше команды, но если у вас не хватит времени, вы ничего не сможете сделать.

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