我正在使用包含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" />
答案 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" >