Windows命令行shutdown命令和快速启动之间的一点坑

Hybrid shutdown

自Win8.1开始,在休眠和完全关闭之外,多出一个“混合关闭(hybird shutdown)”的状态。在“控制面板\硬件和声音\电源选项\系统设置”中开启快速启动选项后,在开始菜单中选择关机,设备将进入混合关闭状态。混合关闭状态下,用户会话被关闭,而内核会话处于休眠。

Shutdown.exe -hybrid

在cmd命令行中,可以通过运行shutdown.exe来执行关机。shutdown.exe的hybrid参数表示此次关机执行完全关闭还是混合关闭。

  • 不带hybrid参数时,无论何时,都将执行完全关闭
  • 带hybrid参数时,取决于系统的快速启动设置
    • 启用快速启动时,执行混合关闭
    • 禁用快速启动时,执行完全关闭

下面列举了四种通过shutdown命令来执行关机的情形:

  1. 系统启用快速启动,在cmd中执行shutdown /s /hybrid /t 0
  2. 系统启用快速启动,在cmd中执行shutdown /s /t 0
  3. 系统禁用快速启动,在cmd中执行shutdown /s /hybrid /t 0
  4. 系统禁用快速启动,在cmd中执行shutdown /s /t 0

得到的结果是:Hybrid shutdown、Shutdown、Shutdown、Shutdown
那么有没有办法通过代码或cmd命令行禁用/启用快速启动功能呢?

代码中启用/禁用快速启动

方法一 通过注册表项设置快速启动

与“控制面板\硬件和声音\电源选项\系统设置”中快速启动复选框关联的注册表是

HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\Power\{HiberbootEnabled}

设置为1时,启用快速启动
设置为0时,禁用快速启动
image
image

方法二 通过powercfg命令设置快速启动

image

command line
powercfg /H ON   //启用休眠功能
powercfg /H OFF  //禁用休眠功能
需要注意的是,powercfg /H 控制的是休眠功能,而不是快速启动功能。什么意思呢?前面提到过,混合关闭时,用户会话关闭,而内核会话休眠。怎么休眠呢?其实和系统休眠类似,因此也可以说,快速启动功能依赖于休眠功能。

所以,当使用powercfg /H OFF禁用休眠功能后,不仅快速启动会被禁用,也无法再使系统进入休眠。可以看到,休眠功能禁用后,控制面板中休眠和快速启动对应的设置已经消失。因此,禁用休眠功能后,无论注册表项的值是多少,快速启动都不会生效,关机总是会执行完全关闭。

imageimage

posted @ 2025-05-14 14:12  昏睡红猹  阅读(290)  评论(0)    收藏  举报