Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/wix/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
WiX-卸载msi时如何卸载捆绑包_Wix_Windows Installer_Wix3.7 - Fatal编程技术网

WiX-卸载msi时如何卸载捆绑包

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

我正在使用WiX安装我的.msi,我正在使用Bundle元素生成WiX包。 我试图在“添加/删除程序”上不显示捆绑包,因此我将捆绑包元素的属性设置为:

<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这么多年来没有很好地处理这件事。