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

wix Managed Bootstrapper: Engine.EvaluateCondition() requires separate thread?

在我的托管引导程序中,我尝试调用 Engine.EvaluateCondition("MY_PROG_FOUND");在 运行() 方法中。但它从不评估并说类似:"This requires a running thread." 并且它从不评估。

我正在尝试在我的托管引导程序中评估 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()??

任何帮助将不胜感激... 非常感谢。

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

但在此之前,我必须解析 BootstrapperApplicationData.xml 文件以获取 WixBalCondition 元素并获取集合成一个数组,例如BalConditions[].

这是我的代码片段:

void BootstrapperApplication_DetectComplete(object sender, DetectCompleteEventArgs e)
            {
                string balCondtionMessages = string.Empty;
                bool balConditionStatus = true;
                foreach (var balCondition in bootAppData.BundleData.BalConditions)
                {
                    if (!model.BootstrapperApplication.Engine.EvaluateCondition(balCondition.Condition))
                    {
                        balConditionStatus = false;
                        if (!String.IsNullOrEmpty(balCondtionMessages))
                        {
                            balCondtionMessages = balCondtionMessages + '\n' + "- " + balCondition.Message;
                        }
                        else
                            balCondtionMessages = "- " + balCondition.Message;
                    }


                }

                if (!balConditionStatus) 
                {
                 SetbalConditionMsg(balCondtionMessages);
                }    
        }

这让我们解析 Bundle.wxs 代码中的所有条件,评估它们并在我们的自定义引导程序 UI.

中显示相关消息