【问题标题】:Detect whether a Windows reboot was due to Windows updates检测 Windows 重新启动是否是由于 Windows 更新引起的
【发布时间】:2012-03-27 17:04:47
【问题描述】:

我的 PC 上的一些应用程序一直在检测是否由 Windows 更新完成了重新启动。这是可以观察到的,因为它们在自动 Windows 更新重新启动后重新启动。

这非常有用,因为这些应用程序会重新加载更改,甚至 未保存 更改或恢复选项卡(在浏览器的情况下)。执行此操作的应用程序示例:

  • 谷歌浏览器
  • Microsoft Visual Studio
  • 微软画图

在所有情况下,应用程序都会保存它们在重新启动之前所处的状态

(我的电脑实际上自动从待机状态唤醒,并在安装更新时自行重启。可惜这样做后它没有回到待机状态。)

我的问题是:如何以编程方式检测这种重启?在重新启动之前似乎可以可靠地检测到它。

How can I get the Windows last reboot reason 的问题可能看起来是重复的,但没有答案说明更新。

我用 C# 编写代码,所以用 C# 回答会很有帮助,尽管我也可以阅读 C 和 C++。

【问题讨论】:

  • 您也可以尝试在 ServerFault 处询问。我在那里看到了一些关于重新启动 Windows 的问题。试试serverfault.com/search?q=windows+reboot
  • 我想以编程方式(使用编程语言)检测重新启动...然后在 ServerFault 询问可能不对
  • 我认为他们可以提供一些您可以用来编写代码的信息。就像你说的,你“只需要知道去哪里寻找什么状态”。如果您真的在寻找答案,我不会这么快拒绝一个可能有用的答案。
  • 这几乎是一个明确的答案,您可以在那里发布:)。所以我必须在收到关机事件时查看事件日志? @DOK 好的。那里确实有点粗鲁,我将其编辑掉
  • 如果您以其他方式重新启动计算机,例如在命令行中使用 shutdown /r,这些应用程序的行为是否会有所不同?

标签: c# .net windows winapi reboot


【解决方案1】:

Application Restart:

应用程序可以使用应用程序恢复和重启 (ARR) 在应用程序因未处理的异常退出之前或应用程序停止响应时保存数据和状态信息

和:

或者如果计算机因更新而需要重新启动。

应用程序在事后并未检测到重启原因 - 它们已被设计为使用此 API。没有(据我所知)用于此的托管 API。


点击几下即可Saving data and application state when application is being closed due to a software update。同样,没有托管 API。

【讨论】:

    【解决方案2】:

    通常当 Windows 重新启动时,它通过使用 shutdown.exe 和 /g 标志来执行重新启动,该标志保存所有已注册的运行程序在重新启动之前的状态。您要做的是注册您的应用程序以重新启动。有一个 good sample 与 MSDN 的文档。它在 C# 和 C++ 中可用。

    【讨论】:

      猜你喜欢
      • 2010-11-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-03-07
      • 2013-03-07
      • 1970-01-01
      相关资源
      最近更新 更多