Я хочу сохранить предыдущие версии моего приложения Bootstrapper, как этого добиться?WIX - Как выборочно удалить <Bundle>
Я знаю, что мы можем использовать тег Upgrade в MSI, где мы можем идентифицировать разные версии и выполнить операцию деинсталляции на них.
Теперь у меня есть приложение Bundle, которое имеет один или несколько MSI, которые используют некоторый код UpgradeCode. Каждый раз, когда я создаю новую сборку, я просто версия MSI и это приложение Bundle. Когда я приступаю к установке более поздней версии приложения Bundle, он удаляет предыдущую версию Bundle, чего я не хочу. Я хочу сохранить предыдущие версии приложения Bundle.
Есть ли что-то вроде UpgradeVersion в Bundle, где мы могли бы идентифицировать разные версии и выборочно удалять.
Мой Bundle код файла сниппет:
<Bundle Name="myApp"
Version="1.0.0.0"
Manufacturer="Myself"
UpgradeCode="SOME-GUID">
<BootstrapperApplicationRef Id="ManagedBootstrapperApplicationHost" >
...
</BootstrapperApplicationRef>
<Chain>
<PackageGroupRef Id= 'WindowsInstaller45'/>
<PackageGroupRef Id ='NetFx45Offline'/>
<PackageGroupRef Id ='MY_MSI'/>
</Chain>
</Bundle>
<Fragment Id ='PkgFragments'>
<PackageGroup Id ="MY_MSI">
<MsiPackage SourceFile= "$(var.Installer.TargetPath)"
Id="MYAPP"
Cache ="yes"
Visible ="no"
DisplayInternalUI ="no"
Permanent="no">
<MsiProperty Name='INSTALLLOCATION' Value='[InstallFolder]' />
<MsiProperty Name='SELECT_UNINST' Value='[UninstallPrevVersion]' />
</MsiPackage>
</PackageGroup>
</Fragment>
Мой Продукт код WIX файл фрагмент кода
<Product Id="*"
Name="$(var.ProductName)"
Version="$(var.ProductVersion)"
Manufacturer="$(var.ManufacturerName)"
UpgradeCode="$(var.UpgradeCode)">
<Property Id="SELECT_UNINST" Secure="yes">1</Property>
<Upgrade Id="SOME-GUID2">
<UpgradeVersion Minimum="0.0.0.0" Maximum="$(var.ProductVersion)" IncludeMinimum="yes" IncludeMaximum="yes" Property="UNINSTALL_PREV_VERSION" />
</Upgrade>
<CustomAction Id="UninstPrev" Property="UNINSTALL_PREV_VERSION" Value="0" />
<InstallExecuteSequence>
<Custom Action="UninstPrev" Before="InstallInitialize"><![CDATA[SELECT_UNINST <> 1]]></Custom>
<RemoveExistingProducts Overridable="no" After="UninstPrev"></RemoveExistingProducts>
</InstallExecuteSequence>
</Product>
Желая, чтобы ваш продукт оставался во время ** обновления **, совершенно противоречит тому, что влечет за собой обновление. Если вы хотите, чтобы они остались позади, не рассматривайте их как один и тот же продукт, дайте им новые GUID обновления и GUID продукта. Сохраните список каждого руководства по обновлению, и если вы хотите его удалить, добавьте тег, ссылающийся на конкретный GUID обновления, который вы хотите удалить, и обработайте OnPlanRelatedBundle соответственно в вашей DLL BootstrapperApplication. –