【问题标题】:How do I conditionally uninstall pre-requisites based on a CheckBox using Wix?如何使用 Wix 基于 CheckBox 有条件地卸载先决条件?
【发布时间】:2019-09-26 02:39:32
【问题描述】:

在安装我的应用程序时,它会检测先决条件并根据需要安装它们。因为我不希望(通常)卸载先决条件,所以我将“永久”属性设置为“是”。这是使用 Bootstrapper 中的以下 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 类型。我知道我已经看到安装程序删除了“所有组件”选项,这会删除其他应用程序,所以我认为这一定是可能的,但我不知道如何做到这一点。

【问题讨论】:

    标签: wix bootstrapper uninstallation wix3.11


    【解决方案1】:

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

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

    【讨论】:

    • 如果我使用的是内置引导程序之一,我认为这意味着我是 SOL?
    • wixstdba 没有实现这样的功能。幸运的是,您不是 SOL(这是可能的),但需要做很多工作。或者,也许,找到支持此功能的已构建 BA。
    • 谢谢。我会考虑自己制作,然后使用 OnPlanPackageBegin,学习新东西总是很有趣。
    猜你喜欢
    • 2010-12-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-02-10
    • 2011-02-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多