5

我想检查用户是否传递了默认值为本地的 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>

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

我尝试了很多场景,并且可以找到问题所在。在比较分配为的变量值时,

<?define uName = [USERNAME]?>

尽管该值已分配给 uName,但我们无法进行比较。我在这里做错什么了吗?或者这种问题还有其他方法吗?

4

1 回答 1

14

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

<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>
于 2013-03-15T11:27:32.507 回答