【问题标题】:How can a required reboot be detected for Windows 7如何检测 Windows 7 所需的重新启动
【发布时间】:2013-03-07 02:31:35
【问题描述】:

我正在开展一个项目,其中在 Windows 7 PC 上安装了多个软件和驱动程序。这将在没有用户输入的情况下工作。

现在有一个问题:如何在此程序中确定是否需要重新启动才能完成安装(可以是驱动程序或软件)。

我们正在使用嵌入式 Windows 7,并且没有启用任务栏或任何工具提示或类似的东西可见。软件以静默模式安装。

【问题讨论】:

    标签: c# windows windows-7 reboot required


    【解决方案1】:

    使用以下注册表项:

    HKLM\System\CurrentControlSet\Control\Session Manager\PendingFileRenameOperations
    

    来源:How to find out if an MSI I just installed requested a windows reboot?

    正如提问者发现的那样,HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Component Based Servicing\RebootPending 显示只要操作系统是 Vista 或更高版本,机器上的重新启动等待时间。

    【讨论】:

    • 这对司机也有用吗?只是想知道它,因为我已经读过它不是 100% 肯定的^^ 无论如何谢谢
    • 我认为这取决于驱动程序的安装方式。我建议您在安装完成后检查嵌入式系统上的注册表。如果密钥未提供您要查找的信息,请使用新信息更新问题。
    • 我发现了一些文字,从 Vista 开始,除了您指定的密钥之外,还有一个可用的 HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Component Based Servicing\RebootPending 密钥以及 HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\WindowsUpdate\Auto Update\RebootRequired。我会看看,它们是如何工作的
    • 如果存在名为“RebootRequired”的子项,请检查“HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Component Based Servicing\”。如果存在名为“RebootRequired”的子项,请检查“HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\WindowsUpdate\Auto Update\”。如果存在值“PendingFileRenameOperations”,请检查“HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\”。如果满足这些条件中的任何一个,则需要重新启动。
    • @hoffmanuel RebootPending not RebootRequired for "HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Component Based Servicing\"。你能在之前的评论中修正这个错字吗?
    【解决方案2】:

    经过长时间的研究,我找到了一种方法,可以直接在 .NET 应用程序中使用本机 Windows DLL 查询挂起的重新启动。 主要问题是 Windows 必须重新启动的原因可能有很多。此外,Windows 版本有时也会发挥作用。

    在研究过程中,我看到一篇文章描述了 Windows Update 环境中的各种脚本,例如确定是否启用了自动更新服务或是否需要重新启动计算机。在那里您将找到对 Microsoft.Update.SystemInfo 对象的引用,该对象最终导致 ISystemInformation 接口具有 ISystemInformation::get_RebootRequired 方法(获取一个布尔值,指示是否需要重新启动系统才能完成安装或卸载一个或多个更新。)。

    有关旅程的更多详细信息,请参阅我的博文Determine programmatically pending reboot status for a Windows machine in C# and PowerShell

    【讨论】:

      【解决方案3】:

      "PendingReboot" 模块将所有提到的测试(+ CCM WMI 探测)合并到一个方便的 cmdlet 中,以可靠地检测挂起的重新启动:

      # Install
      Install-Module -Name PendingReboot
      
      # Run
      Test-PendingReboot -Detailed
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2010-11-02
        • 2017-02-26
        • 2012-03-27
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多