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

标签 wix windows-installer wix3.6

我想检查用户是否已经为 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/

相关文章:

windows - 在未激活 Windows 更新服务的情况下安装 Windows 更新文件 (*.msu)

WIX 错误 2716 : Couldn't create a random subcomponent name for component 'CopySTST'

c# - InstallFinalize 后 WIX 自定义操作修改 INSTALLFOLDER 中的文件

.net - 一个 Windows 安装程序中的 32 位和 64 位程序集

installation - 提取 msi 时出现错误 2203

wix - 如何有条件地安装多个网址?

使用自定义/参数进行 WiX Bootstrap 静默安装

wix - 什么是最好的 MSI 生成安装工具?

c# - 将页面添加到安装程序 -Wix 工具集

wix - WiX v4的状态是什么?