我想检查用户是否已经为 USERNAME 传递了一个默认值为本地的参数。我想看看我是否收到一条消息,如果该值是本地的。问题在于以下方式。这不起作用。
<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,但我们无法进行比较。我在这里做错了什么吗?或者有没有其他方法可以解决此类问题?
最佳答案
你能在没有变量的情况下这样做吗?<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>
关于wix - 使用 if 条件比较 WiX 中的变量值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15428574/