我运行 Matlab 模拟,有时需要几周时间才能完成,当 Windows 重新启动时,我会丢失所有工作,因此我确实需要一种方法来停止自动重新启动。
Windows 11 似乎已禁用所有绕过自动更新重启的方法。还有解决方法吗?
过去可以在以下位置设置 NoAutoRebootWithLoggedOnUsers:
计算机\HKEY_LOCAL_MACHINE\SOFTWARE\Policies\Microsoft\Windows\WindowsUpdate\AU
如果您还在同一位置将 AUOptions 设置为 4,但这现在对我不起作用。
正如 @Ramhound 所说,Windows 不会在工作时间重新启动。我的解决方案是运行一个计划任务来更改注册表中的工作时间,比如每隔一两个小时,这样它就永远不是工作时间。我编写了这个cmd命令行批处理文件程序:
我使用 Windows 任务计划程序使这个 .bat 脚本每小时运行一次。
我安装了一个更新,需要在世界标准时间 2024 年 5 月 31 日下午 3 点重新启动。我被告知,此次重启将在工作时间之外进行。截至 UTC 时间 6 月 2 日晚上 10 点,55 小时后,尚未重启。
编辑:我想出了如何采纳@Jonathan 的建议。使用 powershell 命令更容易进行模数学运算(并获得与区域设置无关的时间)。它仍然是一个cmd批处理文件,但它调用了powershell。将代码减少到 4 行,并且应该可以在任何地方使用。
Windows 实际上有一个 API,它允许具有窗口的进程无限期地阻止系统关闭,直到用户手动选择下一步要做什么。 (可能,正如 @josh3736 指出的那样,Windows 更新最终可能会打破这一点。但我个人还没有经历过具体的案例。至少在你睡觉时阻止关机直到你醒来应该是安全的,然后你就可以了点击cancel取消关机)
https://learn.microsoft.com/en-us/windows/win32/api/winuser/nf-winuser-shutdownblockreasoncreate
请注意,单独调用此函数无法成功阻止关闭/重新启动。您还需要您的应用程序来处理
WM_QUERYENDSESSION
和WM_ENDSESSION
消息。我将在最后讨论它们。如果您不是开发人员,因此不知道如何使用 Windows API,您可以使用我几年前出于完全相同的目的编写的一个小程序:https://github.com/real-guanyuming-he/ShutdownBlocker
无论哪种方式,当您成功创建关闭阻止原因后,Windows 将在发出关闭(包括更新重新启动)时暂停,并向您显示此信息,您可以在其中单击“取消”取消关闭。
注意:如果你无法控制你的Matlab模拟程序(我不使用Matlab,所以我不知道它是否可能),那么它可能会也可能不会起作用,具体取决于Matlab如何处理这种情况。根据微软的说法(https://learn.microsoft.com/en-us/windows/win32/shutdown/shutting-down),
如果 Matlab 在收到此消息时选择返回 TRUE,它将关闭,即使关闭是通过这种方式阻止的。 (如果您调用 API
FALSE
时未返回WM_QUERYENDSESSION
,那么它将不会成功,因为您的应用程序将因此关闭)组策略配置自动更新允许您阻止自动安装更新。
gpedit.msc