【发布时间】:2013-03-07 02:31:35
【问题描述】:
我正在开展一个项目,其中在 Windows 7 PC 上安装了多个软件和驱动程序。这将在没有用户输入的情况下工作。
现在有一个问题:如何在此程序中确定是否需要重新启动才能完成安装(可以是驱动程序或软件)。
我们正在使用嵌入式 Windows 7,并且没有启用任务栏或任何工具提示或类似的东西可见。软件以静默模式安装。
【问题讨论】:
标签: c# windows windows-7 reboot required
我正在开展一个项目,其中在 Windows 7 PC 上安装了多个软件和驱动程序。这将在没有用户输入的情况下工作。
现在有一个问题:如何在此程序中确定是否需要重新启动才能完成安装(可以是驱动程序或软件)。
我们正在使用嵌入式 Windows 7,并且没有启用任务栏或任何工具提示或类似的东西可见。软件以静默模式安装。
【问题讨论】:
标签: c# windows windows-7 reboot required
使用以下注册表项:
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 或更高版本,机器上的重新启动等待时间。
【讨论】:
HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Component Based Servicing\RebootPending 密钥以及 HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\WindowsUpdate\Auto Update\RebootRequired。我会看看,它们是如何工作的
经过长时间的研究,我找到了一种方法,可以直接在 .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
【讨论】:
"PendingReboot" 模块将所有提到的测试(+ CCM WMI 探测)合并到一个方便的 cmdlet 中,以可靠地检测挂起的重新启动:
# Install
Install-Module -Name PendingReboot
# Run
Test-PendingReboot -Detailed
【讨论】: