【问题标题】:How to silently uninstall InstallShield.exe which is bundled inside a wix bundle?如何静默卸载捆绑在 wix 包中的 InstallShield.exe?
【发布时间】:2018-02-09 00:38:54
【问题描述】:

我正在使用 wix 开发自定义托管引导程序应用程序。我的安装程序会安装我的应用程序的 .Netframework461(如果需要)、redist_x86 和 msipackage。

我的新要求是与上述组件一起安装一个InstallShied exe。我可以静默安装 installshield exe,但我的安装程序没有卸载 installshield。

我在 wix bundle 文件中添加的代码如下:

<PackageGroup Id ="InstallShield">
  <ExePackage Id="InstallShield" DisplayName="InstallShield" InstallCommand="/s /v/qn" UninstallCommand="/x /s /v/qn" PerMachine="yes" Vital="yes" Permanent="no" SourceFile="setup.exe" Compressed="yes"/>
</PackageGroup>

另一个有趣的部分是,我可以使用命令提示符中代码中使用的相同命令静默安装和卸载相同的 InstallShield exe。

我的安装程序和命令提示符都以管理员模式运行。

在进行更多研究后,我了解到静默安装后它会删除 exe 详细信息,因此不会获取 installshield exe 进行卸载。我不知道这是正确的观察。我的日志文件中显示的错误如下所示。

我有一个解决方案,比如生成一个安装响应文件。我找到的命令如下。

Setup.exe /s /f1"[SETUPSUPPORTDIR]\Setup.iss"

但我的问题是,如何才能静默卸载上述响应文件。正确的卸载命令是什么?

【问题讨论】:

  • 不同类型的 InstallShield 引导程序需要不同的命令行来静默执行。你知道它是从什么类型的项目构建的,或者有文档告诉你用什么参数调用它?

标签: wix installshield bootstrapper wix3.10


【解决方案1】:

您的 ExePackage 上没有 DetectCondition,因此引导程序无法确定在安装或卸载时是否安装了可执行文件。

确定包是否存在于目标系统上的条件。此条件可以使用内置变量和搜索返回的变量。此条件是必要的,因为 Windows 不提供检测 ExePackage 存在的方法。 Burn 使用此条件来确定在捆绑操作期间如何处理此包;例如,如果此条件为 false 或省略并且正在安装包,Burn 将安装此包。

通常,您通过让 RegistrySearch 查找安装产品时存在的特定注册表项或位置来执行检测条件,并且您可以将变量设置为其值,或者将其设置为 true 或 false 以判断它是否存在。然后可以根据变量的值轻松评估您的检测条件,并且您的引导程序将知道尝试卸载或安装产品。

【讨论】:

  • 非常感谢。那真的很有帮助。我添加了一个检测条件,它工作正常。
【解决方案2】:

将“永久=“是””更改为“永久=“否””。目前,您的安装程序甚至不会尝试在卸载时删除 .exe 包,因为它被列为永久。

【讨论】:

    【解决方案3】:

    我不确定,但您可能需要为 Installshield setup.exe 卸载过程创建一个响应文件(该响应文件与安装期间创建的响应文件不同)。看到这个答案:Installshield Silent Uninstall not working at Command Line

    setup.exe 开关:

    并把它扔进去:http://unattended.sourceforge.net/installers.php

    【讨论】:

    • 感谢您的宝贵时间。我得到了检测条件的结果。
    猜你喜欢
    • 2014-02-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-03-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-04-10
    相关资源
    最近更新 更多