WiX Burn软件包安装程序 - 处理升级和卸载exe软件包

时间:2016-10-21 17:55:50

标签: wix exe upgrade uninstall bootstrapper

我正在使用包含MSI包和一些EXE包的WiX捆绑安装程序。对于EXE软件包,似乎WiX软件包安装程序可以处理升级或卸载,但不能同时处理两者。是否可以使用ExePackages创建一个WiX软件包安装程序,它将同时处理ExePackages的升级和卸载?

我遇到的第一个问题是,在卸载我的软件包时,它只会卸载MSI软件包并将EXE安装的软件包保留在系统上。我发现解决方案是在ExePackage元素中放置一个DetectCondition。但是,DetectCondition似乎会干扰升级ExePackage。使用DetectCondition,升级安装的日志显示Exe包的“Error 0x80070002:找不到有效负载”。

例如,带有DetectCondition的ExeBundle部分看起来像这样:

<ExePackage Id="BLAH_INSTALLER"
              SourceFile="$(var.SolutionDir)\InputBin\SetupBlah.exe"
              Compressed="yes"
              InstallCommand="/install /norestart /quiet"
              UninstallCommand="/uninstall /quiet"
              RepairCommand="/repair /quiet"
              DetectCondition="BlahPresent"
              Cache="always" >
    <dep:Provides Key="IntelISA" Version="5.1.10.160" />
  </ExePackage>

BlahPresent逻辑:

<util:FileSearch
  Id="Blah_Installed"
  Path="[ProgramFiles64Folder]\Blah\blah.exe"
  Variable="BlahPresent"
  Result="exists" />

1 个答案:

答案 0 :(得分:1)

我在一个示例中找到了这个DetectCondition,它似乎可以在捆绑包中升级和卸载ExePackage:

DetectCondition="WixBundleInstalled=1"

这是它在ExePackage元素中的显示方式:

<ExePackage Id="BLAH_INSTALLER"
              SourceFile="$(var.SolutionDir)\InputBin\SetupBlah.exe"
              Compressed="yes"
              InstallCommand="/install /norestart /quiet"
              UninstallCommand="/uninstall /quiet"
              RepairCommand="/repair /quiet"
              DetectCondition="WixBundleInstalled=1"
              Cache="always" >