How do I reference the Reboot Pending Property in Burn (WiX)

前端 未结 4 1497
遥遥无期
遥遥无期 2020-12-18 08:27

How do I reference the RebootPending property in a Burn (WiX) bootstrapper? I know the property name is RebootPending, which is actually referencing the MsiSystemRebootPend

相关标签:
4条回答
  • 2020-12-18 08:41

    I don't know if it helps but it says here that RebootPending value

    will reflect the reboot status of the system when the variable is first requested

    0 讨论(0)
  • 2020-12-18 08:56

    For some general ideas see tool WhyReboot. Here is what it does:

    Examines documented registry locations for post-reboot file copy/rename/delete operations.

    Examines documented registy locations for "Run Once" applications: these will run once on the next reboot, and are probably used by an installer to perform post-reboot file cleanup and other operations such as registry manipulation.

    Examines Wininit.ini on Win9x/ME platforms for pending file rename/delete operations.

    0 讨论(0)
  • 2020-12-18 08:56

    ISystemInformation::RebootRequired: Somebody asked for some sample code to call ISystemInformation::RebootRequired mentioned in Arnson's answer.

    Here is one blurb - not exactly great, but maybe give it a try:

    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
    

    Maybe just use the latter part:

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

    I am not really familiar with the Windows Update Agent Object Model.


    Reboots: There are many registry locations that can be involved in triggering a reboot (warning). Get-PendingReboot-Query. And a similar PowerShell script.

    Here are some registry locations I have found that are involved in Windows rebooting (definitely not exhaustive):

    • 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

    And computer rename operation in progress:

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

    CCMClientSDK: And then there are some WMI calls to check for SCCM 2012 Client Reboot Pending Status. CCMClientSDK.IsHardRebootPending and CCMClientSDK.RebootPending. Check the Get-PendingReboot-Query script.

    0 讨论(0)
  • 2020-12-18 08:58

    Burn doesn't use MSI's MsiSystemRebootPending because it operates outside an installation transaction. So Burn uses ISystemInformation::RebootRequired instead. There's no guarantee that MSI and ISystemInformation::RebootRequired have the same idea about whether a reboot is required, since MSI doesn't document with MsiSystemRebootPending reflects.

    0 讨论(0)
提交回复
热议问题