在我的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()??
任何帮助都会非常感激... 非常感谢。
答案 0 :(得分:3)
后来我发现在事件调用期间单独的线程处于活动状态。所以我在 DetectComplete 事件期间尝试了它并且它有效。
在此之前,我必须解析 BootstrapperApplicationData.xml 文件以获取 WixBalCondition 元素并将集合转换为数组,例如BalConditions []。
这是我的代码段:
2.01507e002
这使我们解析Bundle.wxs代码中的所有条件,评估它们并在Custom Bootstrapper UI中显示相关消息。