如何使用Wix有条件地基于CheckBox卸载必备组件?

时间:2019-05-08 11:13:00

标签: wix bootstrapper uninstaller wix3.11

在安装我的应用程序时,它将检测先决条件并根据需要进行安装。因为我不希望先决条件被卸载(通常),所以我将'permanent'属性设置为'yes'。这是使用引导程序中的以下ExePackage完成的。

<ExePackage
    SourceFile ="@@EA_PROJECT_NAME@Installer_SOURCE_DIR@/inst_binaries/postgresql-10.7-1-windows-x64.exe"
    InstallCommand=' --unattendedmodeui minimal --mode unattended --prefix "[ProgramFiles64Folder]\@MANUFACTURER@\postgres" --datadir "[ProgramFiles64Folder]\@MANUFACTURER@\data" --disable-components stackbuilder'
    UninstallCommand=' --unattendedmodeui minimal --mode unattended'
    DetectCondition="( POSTGRESINSTALLED_x64 &gt;= postgres_version ) AND ( NOT REINSTALL )"
    Compressed ="yes"
    Vital ="yes"
    PerMachine="yes"
    Permanent = "yes" 
    Description="Postgres installer"
/>

这很好,没有任何问题。我想做的是有条件地卸载先决条件。根据用户选择一个复选框,还应该删除必备的ExePackage。我尝试将Permanent更改为条件,但是编译器抱怨这不是有效的yes / no类型。我知道我已经看到安装程序会删除“所有组件”选项,从而删除其他应用程序,因此我认为这是有可能的,但是我对如何完成工作感到茫然。

1 个答案:

答案 0 :(得分:2)

您的BootstrapperApplication将需要处理这种情况。即,处理IBootstrapperApplication::OnPlanPackageBegin()回调并在卸载捆绑软件期间将此软件包的请求状态更改为不卸载。

Burn引擎没有提供声明性的方式来执行此操作。