使用if条件比较WiX中的变量值

时间:2013-03-15 09:18:50

标签: wix windows-installer wix3.6

我想检查用户是否已传递USERNAME的参数,其默认值为local。我试图看看如果值是本地的,我是否收到消息。问题在于以下方式。这不起作用。

<Property Id="USERNAME" Value="local"/>
<?define uName = [USERNAME]?>

<?if $(var.uName) = local ?>
      <Condition Message="$(var.uName)">0</Condition>
<?endif?>

但是,如果我将代码更改为以下内容,它将给出消息。

<?define uName = local?>

<?if $(var.uName) = local ?>
      <Condition Message="$(var.uName)">0</Condition>
<?endif?>

以下代码将USERNAME属性的值分配给uName变量。

<Property Id="USERNAME" Value="local"/>
<?define uName = [USERNAME]?>
<Condition Message="$(var.uName)">0</Condition>

上面的代码在消息框中打印“local”。

我尝试了很多场景,可以找到问题所在。比较变量值时,将其指定为

<?define uName = [USERNAME]?>

虽然该值已分配给uName,但我们无法进行比较。我在这里做错了吗?或者还有另一种解决这类问题的方法吗?

1 个答案:

答案 0 :(得分:12)

你可以在没有变量的情况下这样做吗?

<Property Id="USERNAME" Value="local"/>

<Condition Message="The username is local, please enter a username for the installation to proceed">USERNAME = "local"</Condition>

如果用户输入了用户名,那么这将是正确的,然后安装将继续,但如果用户没有,那么它将失败,因为默认是本地的。

我想知道如何输入用户名。这是通过命令行还是来自输入对话框?

如果来自对话框 - 我建议使用错误对话框而不是中止安装。我可能完全错了,但只是给你选择。

希望这有助于......:)

编辑:

要执行您想要的操作,只需在组件中添加一个条件,其中包含您的服务。有两个组成部分:

<Component Id="ServiceOne" Guid='*' Directory="Directory">
 //All your service tags etc 
  <Condition><![CDATA[USERNAME = "local"]]></Condition>
</Component>

<Component Id="ServiceTwo" Guid='*' Directory="Directory">
 //All your service tags etc 
  <Condition><![CDATA[USERNAME <> "local"]]></Condition>
</Component>