2013-08-27 2 views
0

У меня есть простой загрузочный загрузочный носитель, в котором первое, что мне нужно сделать, это запустить перезагрузку (до того, как все будет установлено), а затем продолжить установку после перезагрузки. Я настроил цепь, например:WiX ExitCode forceReboot вызывает бесконечную перезагрузку

<Chain> 
    <ExePackage SourceFile="DummyExe.exe"> 
    <ExitCode Behavior="forceReboot" /> 
    </ExePackage> 
    <PackageGroupRef Id="NetFx40Web" /> 
    <PackageGroupRef Id="others..." /> 
</Chain> 

Это прекрасно работает, когда я запускаю инсталлятор изначально: он заставляет перезагрузку и продолжает программу установки при входе в систему, а затем цепь начинается снова с самого начала, таким образом, вызывая другая перезагрузка. Это просто заставляет перезагружаться непрерывно и никогда не продолжает установку.

Я нашел other answers, которые объясняют, как это сделать с помощью специального загрузочного приложения, но в настоящее время я использую bal:WixStandardBootstrapperApplication.

Возможно ли это без написания CBA? (Я использую WiX 3.7)

ответ

1

Вы получаете именно то, о чем просите.

Вы хотите указать атрибут Value в элементе ExitCode для условия Поведение. Без этого поведение вызывается для любого кода выхода. Обратитесь к документации пакета для ожидаемых кодов выхода и их значений. Вы можете указать несколько элементов ExitCode, если хотите, с конечным элементом без значения, чтобы указать поведение по умолчанию.

+0

К счастью, я в контроле 'ExePackage'. Это просто заполнитель, который я добавил для принудительного перезапуска перед установкой. Если я добавлю несколько элементов 'ExitCode', я думаю, мне нужно изменить мой фиктивный exe, чтобы вернуть один код выхода перед перезагрузкой, а другой после перезапуска (чтобы сигнал нам не нужно устанавливать)? Я полагаю, что писать временный рег-ключ - лучший способ сделать это. – kcnygaard

+0

Вероятно, вы должны разрешить запуск exe без каких-либо эффектов. 0 может быть хорошим кодом выхода, так как для завершенной установки. Если вы хотите вообще не запускать его, когда он не будет иметь никакого эффекта, вы можете указать DetectCondition. –

0

Это может работать:

<Chain> 
    <ExePackage Id="DummyReboot" SourceFile="DummyExe.exe" InstallCondition="NOT WixBundleForcedRestartPackage = DummyReboot" > 
    <ExitCode Behavior="forceReboot" /> 
    </ExePackage> 
    <PackageGroupRef Id="NetFx40Web" /> 
    <PackageGroupRef Id="others..." /> 
</Chain> 
Смежные вопросы