WiX - 卸载msi时如何卸载软件包

时间:2014-01-28 15:59:48

标签: wix windows-installer wix3.7

我使用WiX安装我的.msi,我正在使用Bundle Element生成一个WiX Bundle。 我尝试不在“添加/删除程序”中显示Bundle,所以我设置了Bundle元素的属性,如下所示:

<Bundle Name="$(var.ProductName)" Version="!(bind.packageVersion.MSIPackage)" 
      Manufacturer="$(var.ProductManufacturer)" UpgradeCode="$(var.UpgradeCode)" 
      DisableRemove="yes" DisableModify="yes" DisableRepair="yes">

DisableRemove,DisableModify和DisableRepair为“yes”使Bundle隐藏在“添加/删除程序”下。

我的问题是,当我卸载我的应用程序时,应用程序被正确卸载但Bundle仍然是隐藏的,所以当我尝试安装其他版本的应用程序时会导致一些问题,例如新的Bundle检测到还有其他捆绑安装并执行一些版本控制检查等。

所以我的问题是:当从“添加/删除程序”中卸载应用程序时,是否可以卸载Hidden Bundle?

3 个答案:

答案 0 :(得分:6)

要扩展Tom的答案,如果从Bundle标记中删除Disables

<Bundle Name="$(var.ProductName)" Version="!(bind.packageVersion.MSIPackage)"
        Manufacturer="$(var.ProductManufacturer)" UpgradeCode="$(var.UpgradeCode)">

您可以修改MsiPackage标记以隐藏添加/删除程序中的MSI

  <MsiPackage
      Id="YOUR-ID"
      Vital="yes"
      DisplayName="$(var.ProductName)"
      SourceFile="$(var.Source.TargetPath)">

    <MsiProperty Name="ARPSYSTEMCOMPONENT" Value="1"/>

  </MsiPackage>

这将在“添加/删除程序”中只留下一个条目。您的Bundle现在将处理安装和卸载的UI,并将正确地允许安装其他版本的软件包。

答案 1 :(得分:4)

好吧,您可以在msi中使用自定义操作,但不能。

您已经颠倒了捆绑包和包之间的设计关系。我建议你隐藏包并在ARP中显示引导程序。

引导程序引擎(“burn”)是一个与Windows Installer协作的程序包管理器。他们一起处理包的升级和卸载。如果在理解它是如何工作之后,你不想要它做什么,那么你可能想要一个自动提取器而不是刻录。 (一些使用刻录的项目是Visual Studio和WiX本身。)

答案 2 :(得分:0)

每次运行安装程序时使用-repair选项。它是一个黑客,但它的工作原理。问题是捆绑卸载是隐藏的,当运行卸载时,您只是删除内部包而不是捆绑包。

如果要在卸载内部包后再次运行安装,则会出现此问题。安装程序认为仍然安装了该软件包。通过使用-repair选项(每次安装捆绑包时),如果没有捆绑包,则告诉它要么安装捆绑包。或者如果包装被移除则修理它。

-repair =修复(如果没有安装则安装)