Пакет WiX: исправления для 1.0.0 не удаляются из Программы и компоненты при установке пакета 2.0.0
Есть 3 пакета, код указан ниже. 1.0.0, 1.0.0.1 и 2.0.0.
Если установлены версии 1.0.0, 1.0.0.1 и 2.0.0, "Просмотреть установленные обновления" будет по-прежнему иметь 1.0.0.1 в списке установленных. Он будет оставаться там до тех пор, пока не будет удалена последняя версия.
<Wix xmlns="http://schemas.microsoft.com/wix/2006/wi">
<Bundle Name="Burn Installer" Version="1.0.0" Manufacturer="LANSA" UpgradeCode="AAAAAAAA-AAAA-AAAA-AAAA-AAAAAAAAAAAA" Copyright="..." AboutUrl="...">
<BootstrapperApplicationRef Id="WixStandardBootstrapperApplication.RtfLicense" />
<Chain>
<MsiPackage Id="MainPackage" SourceFile="TESTLIST_v1.0.0_en-us.msi" Vital="yes" DisplayInternalUI="yes" />
</Chain>
</Bundle>
</Wix>
<Wix xmlns="http://schemas.microsoft.com/wix/2006/wi">
<Bundle Name="Patch 1.0.0.1" ParentName="Burn Installer" Version="1.0.0.1" Manufacturer="LANSA" UpgradeCode="AAAAAAAA-AAAA-AAAA-AAAA-AAAAAAAAAAAA" Copyright="..." AboutUrl="...">
<RelatedBundle Id="AAAAAAAA-AAAA-AAAA-AAAA-AAAAAAAAAAAA" Action="Patch"/>
<BootstrapperApplicationRef Id="WixStandardBootstrapperApplication.RtfLicense" />
<Chain>
<MspPackage Id="Patch" SourceFile="TESTLIST_v1.0.0.1_en-us.msp" Vital="yes" DisplayInternalUI="no" PerMachine="yes" Permanent="no"/>
</Chain>
</Bundle>
</Wix>
<Wix xmlns="http://schemas.microsoft.com/wix/2006/wi">
<Bundle Name="Burn Installer" Version="2.0.0" Manufacturer="LANSA" UpgradeCode="AAAAAAAA-AAAA-AAAA-AAAA-AAAAAAAAAAAA" Copyright="..." AboutUrl="...">
<BootstrapperApplicationRef Id="WixStandardBootstrapperApplication.RtfLicense" />
<Chain>
<MsiPackage Id="MainPackage" SourceFile="TESTLIST_v2.0.0_en-us.msi" Vital="yes" DisplayInternalUI="yes" />
</Chain>
</Bundle>
</Wix>
Когда применяется обновление, все предыдущие версии и исправления должны быть исключены из списка "Программы и компоненты" и / или "Просмотреть установленные обновления". Точно так же, как это происходит, когда MSI/MSP устанавливаются непосредственно, а не через Bundler.
1 ответ
Ответ для WiX 3.9 и выше заключается в следующем...
В пакетах Major Upgrade код UpgradeCode должен совпадать. "АААААААА-АААА-АААА-АААА-АААААААААААА" в приведенном ниже примере.
В Пакетах Патчей Код Обновления должен быть уникальным, не связанным с любым другим GUID, используемым в любом пакете. "CCCCCCCC-CCCC-CCCC-CCCC-CCCCCCCCCCCC" в примере.
В пакетах Major Upgrade пакет RelatedBundle должен быть уникальным. Этот GUID используется во всех патчах для этого Major Upgrade. "BBBBBBBB-BBBB-BBBB-BBBB-BBBBBBBBBBBB" в примере.
Эти параметры также гарантируют, что основные обновления перечислены в разделе "Программы и компоненты", а исправления - в "Просмотр установленных обновлений".
<Bundle Version="1.0.0" UpgradeCode="AAAAAAAA-AAAA-AAAA-AAAA-AAAAAAAAAAAA">
<RelatedBundle Id="BBBBBBBB-BBBB-BBBB-BBBB-BBBBBBBBBBBB" Action="Detect" />
</Bundle>
<Bundle Version="1.0.0.1" UpgradeCode="CCCCCCCC-CCCC-CCCC-CCCC-CCCCCCCCCCCC">
<RelatedBundle Id="BBBBBBBB-BBBB-BBBB-BBBB-BBBBBBBBBBBB" Action="Patch" />
</Bundle>
<Bundle Version="2.0.0" UpgradeCode="AAAAAAAA-AAAA-AAAA-AAAA-AAAAAAAAAAAA">
<RelatedBundle Id="DDDDDDDD-DDDD-DDDD-DDDD-DDDDDDDDDDDD" Action="Detect" />
</Bundle>