如何使用Wix基于复选框有条件地卸载先决条件?

如何使用Wix基于复选框有条件地卸载先决条件?,wix,bootstrapper,uninstallation,wix3.11,Wix,Bootstrapper,Uninstallation,Wix3.11,在安装我的应用程序时,它将检测先决条件并根据需要安装它们。因为我不想卸载先决条件(通常),所以我将“永久”属性设置为“是”。这是使用引导程序中的以下EXEStrapper包完成的 <ExePackage SourceFile ="@@EA_PROJECT_NAME@Installer_SOURCE_DIR@/inst_binaries/postgresql-10.7-1-windows-x64.exe" InstallCommand=' --unattendedmodeui

在安装我的应用程序时,它将检测先决条件并根据需要安装它们。因为我不想卸载先决条件(通常),所以我将“永久”属性设置为“是”。这是使用引导程序中的以下EXEStrapper包完成的

<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更改为condition,但编译器抱怨它不是有效的yes/no类型。我知道我见过安装程序删除“所有组件”选项,这会删除其他应用程序,所以我认为这一定是可能的,但我不知道如何做到这一点。

您的引导应用程序将需要处理这种情况。也就是说,处理
IBootstrapperApplication::OnPlanPackageBegin()
回调,并在卸载捆绑包期间将此包的请求状态更改为“不卸载”


刻录引擎不提供执行此操作的声明方式。

您的引导程序应用程序将需要处理此情况。也就是说,处理
IBootstrapperApplication::OnPlanPackageBegin()
回调,并在卸载捆绑包期间将此包的请求状态更改为“不卸载”


Burn引擎不提供执行此操作的声明方式。

如果我使用的是内置引导程序,我假设这意味着我是SOL?wixstdba没有实现类似的功能。幸运的是,你不是索尔(这是可能的),但有一个很好的工作需要。或者,也许,找到一个已经建立的BA支持这个功能。谢谢。我将考虑使用OnPlanPackageBegin制作自己的,学习新东西总是很有趣的。如果我使用的是内置引导程序,我想这意味着我是SOL?wixstdba没有实现这样的功能。幸运的是,你不是索尔(这是可能的),但有一个很好的工作需要。或者,也许,找到一个已经建立的BA支持这个功能。谢谢。我会考虑自己制作,然后使用OnPlanPackageBegin,学习新东西总是很有趣的。