Условие запуска, чтобы гарантировать, что 64-битный установщик используется в 64-битной системе - PullRequest
7 голосов
/ 12 августа 2011

Что случилось с моими условиями запуска? Предполагается, что установщик 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 Ответ

7 голосов
/ 12 августа 2011

Согласно таблице 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-разрядной.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...