我想检查用户是否已传递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,但我们无法进行比较。我在这里做错了吗?或者还有另一种解决这类问题的方法吗?
答案 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>