如何以静默方式卸载捆绑在wix bundle中的InstallShield.exe?

时间:2017-08-31 06:49:19

标签: wix installshield bootstrapper wix3.10

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

我的新要求是我需要安装InstallShied exe的上述组件。我可以静默安装installshield exe,但是我的安装程序没有安装installshield。

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

<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。我不知道这是正确的观察。我的日志文件中显示的错误如下所示。

enter image description here

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

Setup.exe / s /f1" [SETUPSUPPORTDIR] \ SETup.iss&#34;

但我的问题是如何针对上述响应文件进行静默卸载。什么是正确的uninstall命令?

3 个答案:

答案 0 :(得分:1)

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

  

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

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

答案 1 :(得分:0)

将'Permanent =“Yes”改为'Permanent ='no“'。目前,您的安装程序甚至不会尝试在卸载时删除.exe软件包,因为它被列为永久性软件包。

答案 2 :(得分:0)

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

setup.exe开关:

并将其投入使用:http://unattended.sourceforge.net/installers.php