如何在Burn(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 Update刚刚完成更新并需要重新启动,它也始终如此。
我的语法错了吗?我的病情应该改为[RebootPending]吗?
在被告知Burn中的RebootPending属性可能与Windows Installer使用的属性不完全对应时,我还能确保我的应用程序在重启未决时不会尝试安装吗?
答案 0 :(得分:5)
Burn不使用MSI的MsiSystemRebootPending,因为它在安装事务之外运行。所以Burn使用ISystemInformation::RebootRequired代替。无法保证MSI和ISystemInformation :: RebootRequired对是否需要重新启动有相同的想法,因为MSI没有带有MsiSystemRebootPending的文档反映。
答案 1 :(得分:2)
对于一些一般性提示,请参阅工具WhyReboot。这是它的作用:
检查重新启动后文件复制/重命名/删除操作的文档注册表位置。
检查“运行一次”应用程序的文档注册位置: 这些将在下次重新启动时运行一次,并且可能由一个人使用 安装程序执行重新启动后文件清理和其他操作 例如注册表操作。
在Win9x / ME平台上检查待处理文件的Wininit.ini 重命名/删除操作。
答案 2 :(得分:2)
ISystemInformation :: RebootRequired :有人要求提供一些示例代码来调用Arnson答案中提到的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
我对the Windows Update Agent Object Model并不熟悉。
重新启动 :触发重启(警告)可能涉及许多注册表位置。 Get-PendingReboot-Query。并a similar PowerShell script。
以下是我发现的一些与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 Status
。 CCMClientSDK.IsHardRebootPending
和CCMClientSDK.RebootPending
。查看Get-PendingReboot-Query script。
答案 3 :(得分:0)
我不知道它是否有帮助,但它说here表示RebootPending值
将反映首次请求变量时系统的重启状态