Согласно таблице LaunchCondition определение:
Выражение, которое должно иметь значение True для начала установки.
Ваше состояние состоит из 2 частей: первая оценивается во время установки, другая - во время сборки. Таким образом, для пакета x86 вторая часть условия оценивается как «no» = «no» во время сборки, что, очевидно, дает True во время установки. И первая часть - VersionNT64 - определена (и, следовательно, True) на машинах x64. Вот почему все условие истинно и установка начинается.
Вы можете переписать ваше условие следующим образом:
<Condition Message="64-bit operating system was detected, please use the 64-bit installer.">
<?if $(var.Win64) = "yes" ?>
VersionNT64
<?else?>
NOT VersionNT64
<?endif?>
</Condition>
Следовательно, в 64-битном пакете условие будет просто VersionNT64
, и оно пройдет и начнет установку. Для пакета x86 условие будет NOT VersionNT64
, которое, очевидно, не будет работать в 64-разрядной среде, но начнется в 32-разрядной.