Wix устанавливает, а затем сразу же пытается восстановить

Я пытаюсь запустить приложение начальной загрузки, используя приложение WixStandardBootstrapperApplication. Пока что он отлично работает для всего, что мне нужно, даже для перезапуска в середине установки. Процесс проходит так - проверяю установлен ли на компе .net 4.5, если нет, то устанавливаю .net 4.5. После установки программа записывает, а затем перезагружает, потому что я обрабатываю коды выхода. После возобновления установщик обрабатывает еще три файла .exe, один из которых зависит от установки .net. Все это работает очень хорошо до тех пор, пока не произойдет перезагрузка, после чего загрузчик попытается восстановить каждую из постустановок исполняемого файла, удваивая время выполнения. Это было бы не так уж плохо, за исключением того, что установка .net 4.5 занимает так много времени, что дублирование очень нежелательно. Я попытался пропустить команду восстановления и заметил, что нет никакой формы RepairCondition, такой как условия установки и обнаружения. Есть ли способ предотвратить процессы восстановления?

Вот код загрузчика:

<Chain>
      <ExePackage Id="NetFx45Redist" Cache="no" Compressed="yes" PerMachine="yes" Permanent="yes" Vital="yes" InstallCommand="/q /norestart" RepairCommand="/q"
              SourceFile="...\...\Setup Files\dotNetFx45_Full_setup.exe"
              DetectCondition="(Netfx4FullVersion=&quot;4.5.50709&quot;) AND (NOT VersionNT64 OR (Netfx4x64FullVersion=&quot;4.5.50709&quot;))"
              InstallCondition="(VersionNT >= v6.0 OR VersionNT64 >= v6.0) AND (NOT (Netfx4FullVersion=&quot;4.5.50709&quot; OR Netfx4x64FullVersion=&quot;4.5.50709&quot;))"
              RepairCondition="" >
        <ExitCode Value="1641" Behavior="forceReboot"/>
        <ExitCode Value="3010" Behavior="forceReboot"/>
        <ExitCode Value="0" Behavior="success"/>
        <ExitCode Behavior="error"/>
      </ExePackage>
      <ExePackage
        SourceFile="...\...\Setup Files\Encoder_en.exe"
        InstallCommand="/q"
        RepairCommand="/q">
        <ExitCode Behavior="success"/>
      </ExePackage>
      <ExePackage
        SourceFile="...\...\Setup Files\vcredist_x86.exe"
        InstallCommand="/q"
        RepairCommand="/q">
        <ExitCode Behavior="success"/>
      </ExePackage>
      <ExePackage
        SourceFile="...\...\Setup Files\vcredist_x64.exe"
        InstallCommand="/q"
        RepairCommand="/q">
        <ExitCode Behavior="success"/>
      </ExePackage>
      <!-- installer for actual software at some point -->
</Chain>

Я знаю, что это в основном хак, чтобы поведение было успешным для этих других .exe, но до тех пор, пока проблема восстановления не будет решена, им нужно, чтобы в противном случае установщик сказал, что это не удается. Я также пытался удалить команды восстановления из них, и это, похоже, совсем не помогает, поэтому я сделал их тихими, чтобы, по крайней мере, они не всплывали и не сбивали с толку пользователя.


person Ian Panzica    schedule 21.06.2013    source источник


Ответы (1)


Вам нужны точные значения атрибута DetectCondition для каждого пакета, который не является MsiPackage. Burn не может определить, что может сделать произвольный .exe, поэтому он полагается на то, что вы сообщите об этом. Без условия обнаружения Burn всегда будет устанавливать пакет. Для .NET вы должны использовать DetectCondition из WiX:

<?define NetFx45MinRelease = 378389?>
...
  <util:RegistrySearch
      Id="NETFRAMEWORK45"
      Variable="NETFRAMEWORK45"
      Root="HKLM"
      Key="SOFTWARE\Microsoft\NET Framework Setup\NDP\v4\Full"
      Value="Release"
      Result="value" />
...
DetectCondition="NETFRAMEWORK45 &gt;= $(var.NetFx45MinRelease)"
person Bob Arnson    schedule 21.06.2013
comment
Спасибо, по какой-то причине я смог найти только условия wix до .net 4 ... также установка пакета не столько проблема ... это то, что пакеты устанавливаются, но затем сразу после установки они восстанавливаются. - person Ian Panzica; 21.06.2013
comment
Я не понимаю, что вы имеете в виду. Пожалуйста, разместите свой журнал записи где-нибудь. - person Bob Arnson; 21.06.2013
comment
Неважно ... лучшее условие обнаружения на самом деле, казалось, решило проблему! Раньше я также имел в виду, что во время установки загрузчик устанавливал каждый исполняемый файл, а затем сразу после этого восстанавливал каждый из них во время той же установки. Это действительно не имело большого смысла для меня, но пока это работает сейчас, я не слишком беспокоюсь об этом. - person Ian Panzica; 21.06.2013