Wix Bundle 在每个包之前重新评估条件

Wix Bundle re-evaluate conditions before each package

我正在使用托管引导程序。在我的包中,我有一个 msi 和一个 exe 包(一个大的基于 Winzip 的自解压安装程序),它们必须在 msi 包之前安装。 msi 包必须检查 exe 包是否安装正确,因为如果 exe 包安装失败或被用户取消,msi 不应继续安装。

仅在安装开始时评估检测条件,而不是在安装包期间或安装包之间进行评估。不幸的是,引导程序不会检测 exe 包是否失败或取消,因为每当用户取消安装时它都会返回 0。

问:在 exe 包安装之后和 msi 包开始安装之前,是否有任何 method/trick 重新评估安装条件,以便评估 msi 包 InstallCondition?

顺便说一句,我可以想到两个解决方案:

  1. 在msi内部评估检测条件(再次写入),但我想 从引导程序通知用户 UI。
  2. 在我的引导程序的 DetectPackageComplete() 方法中做一些事情,但我不这么认为,那将是一个正确的方法。

这是我的代码段:

<Bundle 
    Name            =   "$(var.ProductName)"
    Copyright       =   "$(var.CopyrightNote)"
    Version         =   "$(var.FileVersion)"
    Manufacturer    =   "$(var.Manufacturer)"
    IconSourceFile  =   "$(var.IconFile)"
    UpgradeCode     =   "$(var.UpdgradeCode)"
    AboutUrl        =   "$(var.AboutUrl)"
    Compressed      =   "yes"
    Tag             =   "VA"
  >

<util:RegistrySearchRef Id="PreReqRuntimeReg"/>

 <Chain>
      <RollbackBoundary Id="StartPoint"  />
      <PackageGroupRef Id = "Product_PreReq"  />

      <MsiPackage      Id                      = "MainProduct"
                       DisplayName             = "$(var.ProductName)"                       
                       DisplayInternalUI       = "no"
                       Cache                   = "yes"
                       Visible                 = "no"
                       Compressed              = "yes"
                       EnableFeatureSelection  = "yes"
                       SourceFile              = "$(var.MainProduct)"  
                       Vital                   = "yes"  
                       InstallCondition        = "PreReqRuntimeVersion=&quot;8.2&quot;"
       >
    </Chain>
  </Bundle>
 <Fragment Id="Product_PreReqs">


    <util:RegistrySearch Id="PreReqRuntimeReg" 
        Variable="PreReqRuntimeVersion"                      
        Root="HKLM"
        Key="SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\ThirdParty Compiler Runtime 2013"        
        Value="DisplayVersion" 
        Result="value" 
        Win64="yes" 
    />

    <PackageGroup Id="Product_PreReq">
      <ExePackage Id="PreReqRuntime2013"
        DisplayName="ThirdParty Compiler Runtime 2013"
        Description="ThirdParty Compiler Runtime 2013"
        Cache="no"
        Compressed="yes"
        PerMachine="yes"
        Permanent="yes"
        Vital="yes"
        SourceFile="D:\Pre-Reqs\Pre-Req2013_win64_installer.exe" 
        Protocol ="none"  
        DetectCondition="PreReqRuntimeVersion=&quot;8.2&quot;"
        InstallCondition="(NOT (PreReqRuntimeVersion=&quot;8.2&quot;))"

      />   
    </PackageGroup>

  </Fragment>

到目前为止,我发现方法 1 是最佳选择(但是,仍在寻找更多),即 在 msi 中评估检测条件(再次写入)。因此,如果失败,请向用户显示有关失败的一般消息,并将日志文件的 link 提供给用户。

但是,仍在寻找更好的选择。此外,我强烈觉得有必要获取 msi 错误、解释它们并向用户显示正确的错误消息。 任何建议,帮助都非常受欢迎。 .. 谢谢