确定关闭是否处于待处理状态

确定关闭是否处于待处理状态

Windows 有命令shutdown /t在一定延迟后关闭或重新启动计算机。可以使用 中止待处理的关闭shutdown /a

但我怎样才能确定什么时候当前正在等待或计划关闭,无需中止?

答案1

我如何才能确定关机是否处于待处理或计划状态以及何时进行,而不中止关机?

我认为不可能确定什么时候将会发生关闭。

您可以确定如果使用以下算法来安排关机:

  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
  )

笔记:

  • 我还没有测试上述批处理文件,因为我现在不想关闭我的电脑。

进一步阅读

答案2

一个更复杂的方法是确定是否计划关闭调试并检查标志winlogon.exe的状态ShutdownInProgress。 你需要Windows 调试工具

我还没试过,但是这篇 MSDN 博客文章解释 Windows 关闭时幕后发生的情况以及如何调试winlogon.exe(这是“处理交互式用户登录和注销任务的用户模式进程”)。获取标志状态的调试器命令似乎是:

dd winlogon!ShutdownInProgress l 1
01062b3c 00000000

如果你知道如何在 Windows 中调试内核进程,你可以尝试一下。使用 CDB 和 NTSD 进行调试的初学者指南可能有帮助。

相关内容