5

如何在刻录(WiX) 引导程序中引用 RebootPending 属性?我知道属性名称是 RebootPending,它实际上引用了 Windows Installer 中的 MsiSystemRebootPending 属性。

我目前正在尝试这样的事情:

<bal:Condition Message="There is a restart pending. Please restart your computer before  attempting to install !(loc.ProductName).">RebootPending = 0</bal:Condition>

但这始终是正确的,即使 Windows 更新刚刚完成更新并需要重新启动。

我的语法错了吗?我的情况应该改为 [RebootPending] 吗?

被告知 Burn 中的 RebootPending 属性可能与 Windows Installer 使用的属性不完全对应,否则我将如何确保我的应用程序在重新启动挂起时不会尝试安装?

4

4 回答 4

6

Burn 不使用 MSI 的 MsiSystemRebootPending,因为它在安装事务之外运行。所以 Burn 使用ISystemInformation::RebootRequired代替。不能保证 MSI 和 ISystemInformation::RebootRequired 对是否需要重新启动有相同的想法,因为 MSI 没有记录 MsiSystemRebootPending 反映。

于 2012-06-04T01:52:59.207 回答
2

对于一些一般性的想法,请参阅工具WhyReboot。这是它的作用:

检查记录的注册表位置以进行重启后文件复制/重命名/删除操作。

检查记录的“运行一次”应用程序的注册表位置:这些将在下次重新启动时运行一次,并且可能被安装程序用于执行重新启动后的文件清理和其他操作,例如注册表操作。

检查 Win9x/ME 平台上的 Wininit.ini 是否有挂起的文件重命名/删除操作。

于 2012-06-04T03:13:11.587 回答
2

ISystemInformation::RebootRequired:有人要求提供一些示例代码来调用的回答中提到的ISystemInformation::RebootRequired 。

这是一个简介 - 不是很好,但不妨试一试:

Set autoupdate = CreateObject("Microsoft.Update.AutoUpdate")
autoupdate.Pause()
MsgBox Err.Number & " " & Err.Description

Set sys = CreateObject("Microsoft.Update.SystemInfo")
MsgBox sys.RebootRequired

' autoupdate.Resume() ' Enable to resume AutoUpdate
Set sys = Nothing
Set autoupdate = Nothing

也许只使用后一部分:

Set sys = CreateObject("Microsoft.Update.SystemInfo")
MsgBox sys.RebootRequired
Set sys = Nothing

对 Windows Update Agent Object Model不是很熟悉。


重启:触发重启(警告)可能涉及许多注册表位置。获取-PendingReboot-查询。还有一个类似的 PowerShell 脚本

以下是我发现的一些与 Windows 重新启动有关的注册表位置(绝对不是详尽的):

  • HKLM\SOFTWARE\Microsoft\Updates : UpdateExeVolatile
  • HKLM\SYSTEM\CurrentControlSet\Control\Session Manager : PendingFileRenameOperations
  • HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Installer : InProgress
  • HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Component Based Servicing : RebootPending
  • HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\WindowsUpdate\Auto Update : RebootRequired
  • HKLM\SYSTEM\Setup : SystemSetupInProgress

并且正在进行计算机重命名操作:

  • HKLM\SYSTEM\CurrentControlSet\Control\ComputerName\ActiveComputerName : ComputerName
  • HKLM\SYSTEM\CurrentControlSet\Control\ComputerName\ComputerName : ComputerName

CCMClientSDK:然后有一些 WMI 调用需要检查SCCM 2012 Client Reboot Pending StatusCCMClientSDK.IsHardRebootPendingCCMClientSDK.RebootPending。检查Get-PendingReboot-Query 脚本

于 2018-04-09T23:36:38.077 回答
0

我不知道它是否有帮助,但它在这里说 RebootPending 值

首次请求变量时将反映系统的重启状态

于 2012-06-04T01:32:39.793 回答