wix Managed Bootstrapper:Engine.EvaluateCondition()需要单独的线程吗?

时间:2015-07-06 11:34:59

标签: wix bootstrapper burn

在我的Managed Bootstrapper中,我尝试调用Engine.EvaluateCondition(“MY_PROG_FOUND”);在Run()方法中。但它永远不会评估,并说:“这需要一个正在运行的线程。”它永远不会评估。

我正在尝试在我的托管引导程序中评估Bundle条件,但仍然没有运气。

MY_PROG_FOUND在Bundle代码中定义:

<util:RegistrySearch  Id="PETRELINSTALLLOCATION" 
        Variable="MY_PROG_FOUND"                      
        Root="HKLM"
        Key="SYSTEM\CurrentControlSet\Control\Session Manager\Environment"       
        Value="$(var.my_prog_env_var)"
        Result="exists"
    />

    <bal:Condition Message="[WixBundleName] required the installation of My Program.">
      <![CDATA[Installed OR (MY_PROG_FOUND)]]>
    </bal:Condition>

如何在托管引导程序中使用Engine.EvaluateCondition()?这是否需要在特定事件中调用,例如DetectBegin()??

任何帮助都会非常感激... 非常感谢。

1 个答案:

答案 0 :(得分:3)

后来我发现在事件调用期间单独的线程处于活动状态。所以我在 DetectComplete 事件期间尝试了它并且它有效。

在此之前,我必须解析 BootstrapperApplicationData.xml 文件以获取 WixBalCondition 元素并将集合转换为数组,例如BalConditions []。

这是我的代码段:

2.01507e002

这使我们解析Bundle.wxs代码中的所有条件,评估它们并在Custom Bootstrapper UI中显示相关消息。