我在bundle.wxs
中有一个这样的变量<Variable Name="IsRegistryKeyExist" />
注册表是否搜索以查找密钥是否存在。
<util:RegistrySearch
Id="REGSEARCH"
Root="HKLM"
Key="SOFTWARE\MyApp\Test"
Result="exists"
Variable="IsRegistryKeyExist"/>
以下if语句
<?if IsRegistryKeyExist = 0 ?>
<Variable Name="EneterdIfCase" Value="IfExecuted" />
<?else ?>
<Variable Name="EneterdIfCase" Value="ElseExecuted" />
<?endif ?>
在自定义操作中打印此变量时,无论“IsRegistryKeyExist”的值如何,它都会执行“Else”部分,基本上似乎if条件检查不正确。
以下是我到目前为止所做的试验。
<?if $(var.IsRegistryKeyExist) = 0 ?>
<?if <![CDATA[IsRegistryKeyExist = 0]]?>
<?if [IsRegistryKeyExist] = 0 ?>
<?if IsRegistryKeyExist = "0" ?>
答案 0 :(得分:3)
&lt;?if xxxxx?&gt; stuff是编译时的预处理器,就像添加
一样#ifdef DEBUG
Log(LogLeve.Debug, "Here's a message that only happens in debug builds when DEBUG is defined.");
#endif
仅在产品的调试版本中打印调试消息。
你总是得到else的原因是因为预处理器在编译时查看你的“IsRegistryKeyExist”变量的值而你没有在你的变量声明中为它赋值,所以它, I想想,设置为空/ null /“”。 &lt;?if“”= 0?&gt;总是假的,所以它只将else case放入文件中供编译器编译并完全省略“if”部分中的代码。如果在IsRegistryKeyExist变量的定义中设置Value =“0”,它将始终包含预处理器的if部分if-else。