Windows 有命令shutdown /t
在一定延迟后关闭或重新启动计算机。可以使用 中止待处理的关闭shutdown /a
。
但我怎样才能确定什么时候当前正在等待或计划关闭,无需中止?
答案1
我如何才能确定关机是否处于待处理或计划状态以及何时进行,而不中止关机?
我认为不可能确定什么时候将会发生关闭。
您可以确定如果使用以下算法来安排关机:
shutdown /t xxx
使用以下命令运行“测试”关机当时的价值很大。- 对于 Windows 7 或更高版本,允许的最大时间从 600 秒增加到 315,360,000 秒(10 年)
如果有已经挂起的关闭
shutdown /t xxx
将会失败,错误级别为1190
:已安排系统关闭。(1190)
如果你没有收到上述错误,那么你就知道没有以前的已安排关机计划,因此您需要使用 删除“测试”关机
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
)
笔记:
- 我还没有测试上述批处理文件,因为我现在不想关闭我的电脑。
进一步阅读
- Windows CMD 命令行的 AZ 索引- 与 Windows cmd 行相关的所有事物的绝佳参考。
- 错误级别- 几乎所有应用程序和实用程序在完成/终止时都会设置退出代码。
- 如果- 有条件地执行命令。
- 关闭- 关闭计算机。
答案2
一个更复杂的方法是确定是否计划关闭调试并检查标志winlogon.exe
的状态ShutdownInProgress
。 你需要Windows 调试工具。
我还没试过,但是这篇 MSDN 博客文章解释 Windows 关闭时幕后发生的情况以及如何调试winlogon.exe
(这是“处理交互式用户登录和注销任务的用户模式进程”)。获取标志状态的调试器命令似乎是:
dd winlogon!ShutdownInProgress l 1 01062b3c 00000000
如果你知道如何在 Windows 中调试内核进程,你可以尝试一下。使用 CDB 和 NTSD 进行调试的初学者指南可能有帮助。