Using if condition to compare variable values in WiX

windows-installer, wix, wix3.6

Solution

Could you do it like this without the variables?

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

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

This would be correct if the user entered a username, then the installation would proceed but if the user did not then it would fail as the default is local.

I do wonder how the username is entered. Is this via the command line or from an input dialog?

If from a dialog - I would suggest having an error dialog rather than aborting the installation. I may be completely wrong but just giving you options.

Hope this helps...:)

EDIT:

To do what you want, simply add a condition to your component which has your service inside. Have two components:

<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>

Problem

I want to check whether the user has passed an argument for USERNAME for which the default value is local. I am trying to see if I I get a message if the value is local. The problem is in the following way. This doesn't work. ``` <Property Id="USERNAME" Value="local"/> <?define uName = [USERNAME]?> <?if $(var.uName) = local ?> <Condition Message="$(var.uName)">0</Condition> <?endif?> ``` But, if I change the code to the following it will give the message. ``` <?define uName = local?> <?if $(var.uName) = local ?> <Condition Message="$(var.uName)">0</Condition> <?endif?> ``` And the following code assigns the value of the USERNAME property to the `uName` variable. ``` <Property Id="USERNAME" Value="local"/> <?define uName = [USERNAME]?> <Condition Message="$(var.uName)">0</Condition> ``` The above code prints 'local' in a message box. I tried many scenarios and could locate where the problem is. When comparing variable values, which is assigned as, ``` <?define uName = [USERNAME]?> ``` Though the value is assigned to uName, we can't do the comparison. Am I doing anything wrong here? Or is there another way for this kind of problem?

Original source