Условие запуска, обеспечивающее использование 64-разрядной программы установки в 64-разрядной системе.

Что случилось с моими условиями запуска? Предполагается, что установщик x86 не будет работать в 64-битной системе, но, похоже, это не даст результатов.

<!-- Launch Condition to check that x64 installer is used on x64 systems -->
<Condition Message="64-bit operating system was detected, please use the 64-bit installer.">
  <![CDATA[VersionNT64 AND ($(var.Win64) = "no")]]>
</Condition>

var.Win64 получается из переменных MSBuild, например:

  <!-- Define platform-specific names and locations -->
  <?if $(var.Platform) = x64 ?>
  <?define ProductName = "$(var.InstallName) (x64)" ?>
  <?define Win64 = "yes" ?>
  <?define PlatformProgramFilesFolder = "ProgramFiles64Folder" ?>
  <?define PlatformCommonFilesFolder = "CommonFiles64Folder" ?>
  <?else ?>
  <?define ProductName = "$(var.InstallName) (x86)" ?>
  <?define Win64 = "no" ?>
  <?define PlatformProgramFilesFolder = "ProgramFilesFolder" ?>
  <?define PlatformCommonFilesFolder = "CommonFilesFolder" ?>
  <?endif ?>

Я хотел бы решить мою проблему, но мне также было бы интересно услышать о стратегиях для устранения проблем такого типа.

1 ответ

Решение

Согласно определению таблицы 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 package условие будет NOT VersionNT64, который, очевидно, потерпит неудачу на 64-битной, но начать на 32-битной.

Другие вопросы по тегам