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

时间:2015-08-26 11:18:08

标签: wix bootstrapper burn

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

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

问:在安装exe软件包之后,在msi软件包开始安装之前,是否有任何方法/技巧可以重新评估安装条件,以便评估msi软件包的InstallCondition?

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

  1. 在msi中评估检测条件(再次写入),但我想 从bootstrapper UI通知用户。
  2. 要在我的引导程序,DetectPackageComplete()方法中执行某些操作,但我不这么认为,这将是一种正确的方法。
  3. 以下是我的代码段:

    <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 个答案:

答案 0 :(得分:0)

到目前为止,我发现方法1是最好的选择(但仍然需要更多),即评估msi内的检测条件(再次写入)。因此,如果失败,向用户显示有关失败的通用消息,并将日志文件的链接提供给用户。

然而,仍在寻找更好的选择。此外,我强烈感到需要获取msi错误,解释它们并向用户显示正确的错误消息。 任何建议,帮助都非常欢迎。 ..谢谢