WIX: определить, не работает в моем файле .wxs - PullRequest
0 голосов
/ 21 мая 2018

Я пытаюсь определить код myUpgrade на основе ОС

<?if VersionNT=601?>
   <?define MyUpgradeCode="{GUIDFOR_WIN7}"?>
<?elseif VersionNT&gt;=602?>
 <?define MyUpgradeCode="{GUIDFOR_WIN8AND_LATER}"?>
<?endif?>
....
....
....
<Product Name="My Product"
            Id="*"
            UpgradeCode="$(var.MyUpgradeCode)"
            Version=""
            Language="1033"
            >

, но его оценка невозможна.

 error CNDL0150: Undefined preprocessor variable '$(var.MyUpgradeCode)'. [C:\
Users\abc\Installer.wixproj]

Как настроить 2 upgradeCodes basedбудет установлена ​​версия ОС Windows?

Ответы [ 2 ]

0 голосов
/ 31 мая 2018

Похоже, вы определяете свои переменные вне узла проекта.У меня была такая же ошибка, когда я использовал WiX Setup-Editor, который создал все виды переменных, как в вашем примере.Переместите определение внутрь узла проекта, и тогда ответ выше верен.

0 голосов
/ 22 мая 2018

Если это 64-битная машина, вам нужно использовать VERSIONNT64 вместо свойства VERSIONNT .

Могу я спросить, почему вы меняете код обновления в зависимости от операционной системы?Если вы просто пытаетесь избежать поддержки двух разных версий файла WXS, почему бы вам не сделать вместо этого условную установку?Если в Win7 и Win8 имеются определенные компоненты / функции, почему бы не пометить компоненты / функции как условные, используя Условный элемент ?

ИЛИ Вы можете заблокировать всю установку на основе операционной системы, как указано ЗДЕСЬ

Обновление

    <?define MyUpgradeCode ?>

 <?if VersionNT=601?>
      <?define MyUpgradeCode="{BF23D7DA-FE7D-446A-8950-3B92DD40FED3}"?>
  <?elseif VersionNT&gt;=602?>
      <?define MyUpgradeCode="{3CA8F7F3-312B-4778-97CE-EE9B2C5453E6}"?>
  <?endif?>

Замените ваш WXS вышеуказанным кодом, и он будет работать.Сначала вы определяете переменную, а затем устанавливаете ее значение в коде IF / ElseIF.

Теперь важно отметить, что IF / Else и все другие условные операторы в WIX оцениваются во время сборки.Поэтому он будет устанавливать свойство обновления в зависимости от версии ОС компьютера / сервера, на котором он компилируется, а не там, где он развертывается.

Цель условного оператора состоит в том, чтобы позволить вам включитьили исключить сегмент XML во время сборки.Если выражение оценивается как true, оно будет включено.Если оно оценивается как ложное, оно будет проигнорировано.

Подробнее об этом здесь. WIX PRE PROCESSOR

...