Как сослаться на свойство «Ожидание перезагрузки» в Burn (WiX)

Как мне ссылаться на свойство RebootPending вжечь (WiX) загрузчик? Я знаю, что имя свойства - RebootPending, которое на самом деле ссылается на свойство MsiSystemRebootPending в установщике Windows.

Я сейчас пытаюсь что-то вроде этого:

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

Но это всегда так, даже когда Центр обновления Windows только что завершил обновление и нуждается в перезагрузке.

Мой синтаксис неправильный? Должно ли мое условие иметь [RebootPending] вместо этого?

Получив информацию о том, что свойство RebootPending внутри Burn может не полностью соответствовать свойству, которое использует установщик Windows, как еще я могу убедиться, что мое приложение не пытается установить, когда перезагрузка находится в режиме ожидания?

Ответы на вопрос(4)

Решение Вопроса

потому что он работает за пределами транзакции установки. Так что Burn используетISystemInformation :: RebootRequired вместо. Нет гарантии, что MSI и ISystemInformation :: RebootRequired имеют одинаковое представление о том, требуется ли перезагрузка, поскольку MSI не документирует с помощью MsiSystemRebootPending.

 24 сент. 2013 г., 19:54
Не могли бы вы указать на пример того, как это используется?
 17 дек. 2013 г., 21:31
Как оказалось, ISystemInformation :: RebootRequired и MsiSystemRebootPending от MSI действительно возвращают разные результаты.
 10 апр. 2018 г., 01:56
@Randolph: лучше поздно, чем никогда.I have added a sample below, На всякий случай, если это нужно кому-то другому. Я смотрел на некоторые другие вещи перезагрузки и нашел это. И Манас: да, я тоже это заметил и попытался проработать некоторые детали - но пути Windows загадочны.PendingFileRenameOperations наборыMsiSystemRebootPending до 1, но не влияетISystemInformation.RebootRequired например. Арнсон - мастер краткости :-) - это глупый маленький сценарий, но он делает свою работу? (не знаком с этой объектной моделью).

Вот это значение RebootPending

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

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.

Reboots: Существует много мест в реестре, которые могут быть задействованы при перезагрузке (предупреждение).Get-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 Status. CCMClientSDK.IsHardRebootPending а такжеCCMClientSDK.RebootPending, ПроверитьСкрипт Get-PendingReboot-Query.

WhyReboot, Вот что он делает:

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.

Ваш ответ на вопрос