WiX-卸载msi时如何卸载捆绑包
我正在使用WiX安装我的.msi,我正在使用Bundle元素生成WiX包。 我试图在“添加/删除程序”上不显示捆绑包,因此我将捆绑包元素的属性设置为:WiX-卸载msi时如何卸载捆绑包,wix,windows-installer,wix3.7,Wix,Windows Installer,Wix3.7,我正在使用WiX安装我的.msi,我正在使用Bundle元素生成WiX包。 我试图在“添加/删除程序”上不显示捆绑包,因此我将捆绑包元素的属性设置为: <Bundle Name="$(var.ProductName)" Version="!(bind.packageVersion.MSIPackage)" Manufacturer="$(var.ProductManufacturer)" UpgradeCode="$(var.UpgradeCode)" Disa
<Bundle Name="$(var.ProductName)" Version="!(bind.packageVersion.MSIPackage)"
Manufacturer="$(var.ProductManufacturer)" UpgradeCode="$(var.UpgradeCode)"
DisableRemove="yes" DisableModify="yes" DisableRepair="yes">
DisableRemove、DisableModify和DisableRepair设置为“yes”使捆绑包隐藏在“Add/Remove programs”下
我的问题是,当我卸载我的应用程序时,应用程序被正确卸载,但捆绑包仍然隐藏,因此当我尝试安装其他版本的应用程序时,它会导致一些问题,例如,新捆绑包检测到安装了其他捆绑包,并执行一些版本控制检查等等
因此,我的问题是:当应用程序从“添加/删除程序”卸载时,是否也可以卸载隐藏的捆绑包?嗯,您可以在msi中使用自定义操作,但不可以 您已经颠倒了捆绑包和包之间的设计关系。我建议您隐藏该包并在ARP中显示引导程序
引导程序引擎(“burn”)是一个与Windows Installer协作的包管理器。它们一起处理软件包的升级和卸载。如果在了解了它的工作原理后,您不想要它的功能,那么您可能需要一个自抽取器,而不是烧掉。(一些确实使用burn的项目是Visual Studio和WiX本身。)如果您从Bundle标签中删除了Disables,则扩展Tom的答案
<Bundle Name="$(var.ProductName)" Version="!(bind.packageVersion.MSIPackage)"
Manufacturer="$(var.ProductManufacturer)" UpgradeCode="$(var.UpgradeCode)">
您可以修改MSI软件包标记,以对添加/删除程序隐藏MSI
<MsiPackage
Id="YOUR-ID"
Vital="yes"
DisplayName="$(var.ProductName)"
SourceFile="$(var.Source.TargetPath)">
<MsiProperty Name="ARPSYSTEMCOMPONENT" Value="1"/>
</MsiPackage>
这将在添加/删除程序中只留下一个条目。您的捆绑包现在将处理安装和卸载的UI,并将正确地允许安装捆绑包的其他版本。每次运行安装程序时使用-repair选项。这是一个黑客,但它的工作。问题是捆绑包卸载是隐藏的,当运行卸载时,您只删除了里面的包,而不是捆绑包 这会导致在卸载内部软件包后再次运行安装时出现问题。安装程序认为捆绑包仍在安装。通过使用-repair选项(每次安装捆绑包时),您告诉它如果没有捆绑包,则安装捆绑包。或者,如果包装拆下,则对其进行维修
-修理=修理(或安装,如果没有安装)谢谢@levarius您的解释真的很有帮助。我把你们的答案标为有用,但把汤姆的答案标为解决方案,因为这是第一个答案。现在我同时看到了这两个特性。只需说明MsiPackage标记的属性为“Visible”,如果设置为“no”,则将msi隐藏在ARP上。:)在ARP中显示引导程序的问题在于,默认情况下,引导程序允许并行安装,并且将为同一捆绑包版本创建多个ARP条目,尽管您可能已经生成了新的构建。这意味着,为了让引导程序卸载自己的旧版本,它总是要求您在每次生成QA构建时增加版本。我真的很惊讶burn这么多年来没有很好地处理这件事。