基于子msi软件包功能状态的条件安装

时间:2019-07-01 08:58:42

标签: wix wix3 wix3.11

是否可以检测捆绑软件包中子msi软件包功能的安装状态?

我有这样的捆绑包:

<Chain>
  <PackageGroupRef Id="ChildPackage"/>
  <PackageGroupRef Id="SecondPackage"/>
</Chain>

我要实现的目标是根据SecondPackage内部功能的状态来决定是否应安装ChildPackage

我尝试了如下所示的注册表项解决方案,但失败了。

<!-- Write RegistryKey within ChildPackage -->
<Feature Id="FeatureName" Title="FeatureName" Level="1" AllowAdvertise="no">
    <RegistryKey Root="HKLM" 
        Key="Software\CompanyName\ProductName\FeatureName"
        ForceCreateOnInstall="yes" ForceDeleteOnUninstall="no">
        <RegistryValue Type="string" Name="Version" Value="$(var.VersionNumber)"/>
    </RegistryKey>
</Feature>

<!-- Search the RegistryKey within Bundle -->
<util:RegistrySearch
    Id='FeatureInstalled'
    Variable="FeatureInstalled"
    Result="exists"
    Root="HKLM"
    Key="SOFTWARE\CompanyName\ProductName\FeatureName\Version"/>

<MsiPackage
    Id="SecondPackage"
    SourceFile="SecondPackage.msi"
    InstallCondition="FeatureInstalled">
</MsiPackage>

从日志中,我看到变量FeatureInstalled在安装ChildPackage之前被设置为空,并且在此之后它再也没有机会被重新评估,因此SecondPackage的安装条件评估为False,所以它从未安装。

所以我的问题的第一部分是,是否有一种方法可以在链式软件包安装后安排RegistrySearch评估?

如果不可能,是否还有另一种解决方案可以在子msi软件包中获取该功能的状态?

0 个答案:

没有答案