【问题标题】:How to you determine when Windows is done rebooting?如何确定 Windows 何时完成重新启动?
【发布时间】:2010-10-20 21:52:18
【问题描述】:

我正在使用 Windows 更新 API 来更新一堆虚拟机。随着 Windows 更新,不可避免的重新启动。如果windows box确实完成了重启,谁能想到我可以从远程服务器告诉我的方法?所有想法或想法都将不胜感激。

编辑: 因为 VM 位于 Lab Manager 中并使用隔离配置,WMI 将无法工作,尽管我曾考虑在 VM 备份时使用它发送信号。没有办法可靠地知道要通知谁,因为等待机器的应用程序可能在任意数量的机器上,所以这似乎不合理。然而,时间并不是必需的(尽管我知道当 Service Pack 出现时这会咬我)我在 PING 上取得了很好的成功,然后到目前为止等待 5 分钟,所以我现在要使用它。如果我遇到异常,我将尝试实现虚拟机在它恢复时通知世界。谢谢大家。

【问题讨论】:

标签: c# reboot windows-update


【解决方案1】:

等待它响应 ping。

根据您的 cmets:

1 - Use this script

2 - 如果您对该脚本有任何错误,follow these instructions.

【讨论】:

  • 在您实际登录或服务再次运行之前大约 5 分钟,计算机开始可 ping 通。但我确实尝试过;)
  • 5 分钟?这似乎很极端。你确定你没有在服务器宕机之前捕捉到最后几个 ping 响应吗?
  • 你必须记住这些是 Windows 更新,我正在尝试最坏的情况。这意味着 vista 及其 3 阶段更新。我会试试这个脚本,看看发生了什么。
  • 我不知道机器会在更新完成之前响应 ping。我很高兴修改后的答案奏效了。
【解决方案2】:

Windows 在需要再次重新启动之前只完成了一点点重新启动 :-)

如果您特别想查询虚拟机的状态,那么您应该查看这些处理 Virtual Server 2005 API 的链接:

IVVMirtualMachine 接口...

http://msdn.microsoft.com/en-us/library/aa368465(VS.85).aspx

...有一个名为 State...的属性...

IVMVirtualMachine::State 属性

http://msdn.microsoft.com/en-us/library/aa368637(VS.85).aspx

...这将从 VMVMState 枚举中返回一个值...

http://msdn.microsoft.com/en-us/library/aa368922(VS.85).aspx

在更一般的层面上,您可能应该定义要启动和运行多少 Windows。您认为网络堆栈已准备好“重新启动”,还是需要 IIS/SQL 或其他一些应用程序级服务?

我可能会编写一个应用程序来检查服务器的“心跳”——该应用程序很可能是调用 Windows 更新内容的同一个应用程序。然后,您将获得一个不错的“控制台”,向您显示服务器的状态。心跳应用程序可以 ping 服务器、访问静态 html 页面、访问远程事件日志、使用 WMI 或任何您定义的足以认为您的服务器已重新启动的东西。

【讨论】:

  • 我在 VMWare 而不是 VirtualServer 上,并且在重新启动期间,实际机器关闭的时间非常短。几乎没有机会检测到它,所以它总是通过 vmware 的 API 响应
【解决方案3】:

在事件日志中检查此事件:

Event Type: Information
Event Source:   EventLog
Event Category: None
Event ID:   6005
Date:       7/27/2007
Time:       12:56:24 PM
User:       N/A
Computer:   IWSDEV
Description:
The Event log service was started.

【讨论】:

  • 如果没有 RPC 服务,就无法远程检查事件日志。最好只检查“RpcSs”服务的远程服务状态。这也将消除事件日志错误的可能性很小,例如损坏的日志。
【解决方案4】:

您可以在机器上安装启动程序或服务,以便在每次重新启动时发送电子邮件或某种基于网络的发布。

【讨论】:

    【解决方案5】:

    现实情况是您无法知道它何时完成启动。启动过程是相当异步的,因此您用来确定“启动”完成的任何标准都可能在其他事情完成之前发生。

    我的建议是确定您真正想知道的内容。你在等什么?找到一种方法来确定这是否已经发生,而不必担心“启动”。

    如果您只需要知道机器已备份但可能还没有完成所有的启动后加载,请在启动序列中添加一些东西或向您的代码发出信号的服务。当这个信号发生时,采取任何你需要的行动。

    【讨论】:

    • 我基本上需要再次获得登录屏幕。更新完成后配置。
    【解决方案6】:

    这个问题的更一般的版本是How do I know if a system has powered on?

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-05-06
      • 1970-01-01
      • 2015-06-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多