WiX Bundle не устанавливает Prereq NetFx35 SP1, если NetFx35 уже присутствует

Пакет My WiX Burn (v3.8.611.0) по ошибке (?) НЕ устанавливает его PrereqPackage .NET Framework 3.5 SP1, когда в системе установлен .NET 3.5. Вместо этого он запускает приложение Managed Bootstrapper (которому в моем случае требуется как минимум .NET 3.5 SP1).

NetFx35 SP1 ExePackage устанавливается правильно, если установлена ​​предыдущая версия NetFx или ее нет (проверено с 3.0 SP2, 2.0 SP2 и без .NET Framework вообще). Но это не так, если я устанавливаю поверх NetFx 3.5.

<Bundle>
    ...
    <WixVariable Id="WixMbaPrereqPackageId" Value="Netfx35SP1" />
    <WixVariable Id="WixMbaPrereqLicenseUrl" Value="NetfxLicense.rtf" />
    ...
</Bundle>

<Fragment>
    <PackageGroup Id="Netfx35SP1PackageGroup">
        <ExePackage Id="Netfx35SP1"
                    DisplayName=".NET Framework 3.5 SP1"
                    Cache="no"
                    Compressed="no"
                    PerMachine="yes"
                    Permanent="yes"
                    Vital="yes"
                    InstallCommand="/q /norestart"
                    SourceFile="$(var.NetFx35SetupFileName)"
                    DownloadUrl="$(var.NetFx35Setup)"
                    DetectCondition="1 > 2"
                    InstallCondition="2 > 1" />
    </PackageGroup>
</Fragment>

Обратите внимание: DetectCondition = 1 ›2 и InstallCondition = 2› 1.

Я тестировал XP Pro x64 (SP2), XP Pro x86 (SP3) и Vista HP x86 (SP2), каждый по крайней мере один раз с установленными NetFx 3.0 и NetFx 3.5. У меня было одинаковое поведение со всеми тестами.

Я что-то упускаю? Это ошибка?

Чтобы уточнить: я не получаю сообщения об ошибке. В лог-файлах ничего подозрительного не говорится. Но мое приложение Managed Bootstrapper аварийно завершает работу из-за отсутствия .NET Framework 3.5 SP1.

В файле журнала говорится:

Записать v3.8.611.0, Windows v5.2 (сборка 3790: пакет обновления 2), путь: Z: \ temp_install \ Setup.exe, cmdline: ''

Установка строковой переменной 'WixBundleLog' на значение 'C: \ DOCUME ~ 1 \ ADMINI ~ 1 \ LOCALS ~ 1 \ Temp \ 20130823152241.log'

Установка строковой переменной WixBundleOriginalSource на значение Z: \ temp_install \ Setup.exe

Условие '((VersionNT ›= v5.1) AND (ServicePackLevel› = 3)) OR ((VersionNT ›= v5.2) AND (ServicePackLevel› = 2)) OR (VersionNT ›= v6.0)' оценивается как истинное .

Установка строковой переменной WixBundleName в значение MyBundle

Загрузка приложения управляемого загрузчика.

Создание потока BA для асинхронного запуска.

Обнаружить начало, 5 пакетов

Установка строковой переменной Netfx35Version на значение 3.5.21022.08

Условие «1› 2 »оценивается как ложное.

Обнаруженный пакет: Netfx35SP1, состояние: Отсутствует, кэшировано: Нет

Обнаружение завершено, результат: 0x0


person Marco    schedule 23.08.2013    source источник


Ответы (1)


Wix 3.8 устанавливает .Net 4.0 в предварительном порядке при использовании управляемого приложения-ускорителя. Это позволяет запускать ваш MBA .Net 4.0. Вы должны развернуть .Net 3.5 SP1 в своей цепочке, если вашему приложению это необходимо. Пример здесь (который работает в моем комплекте): http://neilsleightholm.blogspot.com/2012/05/wix-burn-tipstricks.html

person phil    schedule 25.08.2013
comment
Благодарю за ваш ответ. При необходимости пакет устанавливает предварительную версию .NET 3.5 SP1 и запускает MBA должным образом. За одним исключением: когда присутствует .NET 3.5 (без SP1), он пропускает установку PrereqPackage .NET 3.5 SP1 и немедленно запускает MBA. Detect- / InstallCondition не должно быть проблемой: они всегда оцениваются как false / true . Когда я запускаю установку SP1 (так же, как ExePackage / @ DownloadUrl) вручную, она устанавливается нормально. - person Marco; 25.08.2013