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.
中显示相关消息
在我的托管引导程序中,我尝试调用 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.
中显示相关消息