【问题标题】:WiX - How to uninstall the bundle when uninstall the msiWiX - 卸载 msi 时如何卸载捆绑包
【发布时间】:2014-02-20 01:07:12
【问题描述】:

我正在使用 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 检测到还有其他Bundle 已安装并执行一些版本检查等。

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

【问题讨论】:

    标签: wix windows-installer wix3.7


    【解决方案1】:

    为了扩展汤姆的答案,如果你从你的 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,并将正确地允许安装其他版本的 Bundle。

    【讨论】:

    • 感谢@levarius,您的扩展解释真的很有帮助。我将您的答案标记为有用,但我将汤姆答案标记为解决方案,因为它是第一个。现在我看到了两者。
    • 只需评论 MsiPackage 标记具有“可见”属性,如果设置为“否”,则将 msi 隐藏在 ARP 上。 :)
    【解决方案2】:

    好吧,您可以在 msi 中使用自定义操作,但不要这样做。

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

    引导引擎(“burn”)是与 Windows Installer 协作的包管理器。他们一起处理软件包的升级和卸载。如果在了解了它的工作原理之后,您不想要它的功能,那么您可能需要一个自解压器而不是烧录。 (一些确实使用刻录的项目是 Visual Studio 和 WiX 本身。)

    【讨论】:

    • 在 ARP 中显示引导程序的问题是引导程序默认允许并行安装,并且会为同一个捆绑版本创建多个 ARP 条目,尽管您可能已经生成了一个新的建造。这意味着,为了让引导程序卸载自身的旧版本,每次生成 QA 版本时,它总是要求您增加版本。老实说,我很惊讶这些年来烧伤没有很好地处理这个问题。
    【解决方案3】:

    每次运行安装程序时使用 -repair 选项。这是一个黑客,但它的工作原理。问题是bundle卸载是隐藏的,当运行uninstall时你只是删除里面的包,而不是bundle。

    当您想在卸载里面的包后再次运行安装时,这会导致问题。安装程序认为该捆绑包仍然已安装。通过使用 -repair 选项(每次安装捆绑包时),如果不存在捆绑包,您就告诉它安装捆绑包。或者如果包被删除了就修复它。

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

    【讨论】:

      猜你喜欢
      • 2010-11-19
      • 1970-01-01
      • 1970-01-01
      • 2018-02-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-09-23
      • 1970-01-01
      相关资源
      最近更新 更多