Условие запуска, обеспечивающее использование 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-битной.