Wix 捆绑安装程序如何优雅地退出 'User Cancelled Installation' 0x80070642

Wix bundle installer how to gracefully exit a 'User Cancelled Installation' 0x80070642

我花了很多时间研究这个问题,尽我所能阅读所有内容,但我仍然找不到解决方案。

我正在使用 wix BootstrapperApplicationRef,将几个安装程序捆绑到一个整体安装程序中。

假设在完成第一个安装程序时我决定不同意许可协议,所以我决定取消。

我希望整个捆绑包安装程序能够正常退出,但在从第一个安装程序正常退出后,我看到了这个屏幕。

这看起来像是发生了灾难性的错误,而实际上这是一次故意退出。我怎样才能让这个优雅地退出伙计们?

根据wix项目文件,我使用的是wix 3.10。这是我的捆绑包的代码,其中包含一些识别文本 XXXXXX'd

<?xml version="1.0" encoding="UTF-8"?>
<Wix xmlns="http://schemas.microsoft.com/wix/2006/wi"
     xmlns:util="http://schemas.microsoft.com/wix/UtilExtension"
     xmlns:bal="http://schemas.microsoft.com/wix/BalExtension">
  <?if $(var.Configuration) = "Release" ?>
  <?define UpgradeCode = "XXXXXX"?>
  <?endif ?>
  <?if $(var.Configuration) = "Debug" ?>
  <?define UpgradeCode = "XXXXXX"?>
  <?endif ?>
  <?define EULAPath = XXXXXX ?>
  <?define BundleName = "XXXXXX" ?>
  <?define VersionNumber = "XXXXXX" ?>
     
  <Bundle Name="$(var.BundleName)" 
          Version="$(var.VersionNumber)"
          Manufacturer="XXXXXX"
          AboutUrl="XXXXXX"
          UpgradeCode="$(var.UpgradeCode)"
          IconSourceFile="XXXXXX" >
    <BootstrapperApplicationRef Id="WixStandardBootstrapperApplication.RtfLicense">
      <bal:WixStandardBootstrapperApplication LicenseFile="$(var.EULAPath)"
                                              LogoFile="XXXXXX"/>        
    </BootstrapperApplicationRef>
    
<util:RegistrySearchRef Id="NETFRAMEWORK45"/>
<?define NetFx472MinRelease = 461808 ?>
<?define NetFx472EulaLink = http://referencesource.microsoft.com/license.html ?>

<WixVariable Id="WixMbaPrereqPackageId" Value="NetFx472Redist" />
<WixVariable Id="WixMbaPrereqLicenseUrl" Value="$(var.NetFx472EulaLink)" Overridable="yes" />
<WixVariable Id="NetFx472RedistDetectCondition" Value="NETFRAMEWORK45 &gt;= $(var.NetFx472MinRelease)" Overridable="yes" />
<WixVariable Id="NetFx472RedistInstallCondition" Value="" Overridable="yes" />
<WixVariable Id="NetFx472RedistPackageDirectory" Value="redist\" Overridable="yes" />

<Chain>      
  <ExePackage SourceFile="..\..\ThirdParty\Net_Framework_4_7_2.exe"
    DetectCondition="!(wix.NetFx472RedistDetectCondition)"
    InstallCommand="/q /install"
    RepairCommand="/repair"
    PerMachine="yes"
    Vital="yes"
    Permanent="yes"/>
  <MsiPackage SourceFile="XXXXXX"
        ForcePerMachine="yes"
        Visible="no"  
        DisplayInternalUI="yes"
        Permanent="no"
        Vital="yes" />
  <?if $(var.Configuration) = "Release" ?>
    <ExePackage SourceFile="XXXXXX"
      PerMachine="yes"
      Vital="yes"
      Permanent="no"/>
  <?else?>      
    <ExePackage SourceFile="XXXXXX"        
      PerMachine="yes"
      Vital="yes"
      Permanent="no"/>
  <?endif ?>
</Chain>
  </Bundle>

  <Fragment>
    <PropertyRef Id="WIXNETFX4RELEASEINSTALLED" />
    <Property Id="WIX_IS_NETFRAMEWORK_472_OR_LATER_INSTALLED" Secure="yes" />
    <SetProperty Id="WIX_IS_NETFRAMEWORK_472_OR_LATER_INSTALLED" Value="1" After="AppSearch">
      WIXNETFX4RELEASEINSTALLED >= "#$(var.NetFx472MinRelease)"
    </SetProperty>
  </Fragment>
</Wix>

我知道这对您的用户来说是一个令人困惑的场景,但尚不清楚如何修复它。其他用户可能同样感到困惑,取消 MSI 会导致主 window 完全消失。

捆绑包旨在为所有内容提供一个 UI。 DisplayInternalUI 是作为后备实施的,因此用户仍然可以使用他们的 MSI UI,直到他们有时间投资他们的捆绑包 UI。解决此问题的正确方法是停止让单个包显示 UI.