WiX: Препятствуйте тому, чтобы 32-разрядный установщик работал на 64-разрядном Windows

Из-за пользовательского беспорядка, наше приложение требует отдельных установщиков для 32-разрядных и 64-разрядных версий Windows. В то время как 32-разрядный установщик хорошо работает на win64, он имеет потенциал для создания головных болей поддержки, и мы хотели бы предотвратить это.

Я хочу препятствовать тому, чтобы 32-разрядный установщик MSI работал на 64-разрядных машинах Windows. С этой целью у меня есть следующее условие:

<Condition Message="You are attempting to run the 32-bit installer on a 64-bit version of Windows.">
  <![CDATA[Msix64 AND (NOT Win64)]]>
</Condition>

С Win64, определенным как это:

<?if $(var.Platform) = "x64"?>
<?define PlatformString = "64-bit"?>
<?define Win64 ?>
<?else?>
<?define PlatformString = "32-bit"?>
<?endif?>

Вещь, я не могу заставить эту проверку работать правильно. Или это стреляет все время, или ни одно из времени. Цель состоит в том, чтобы проверить присутствие времени выполнения msix64 переменная против времени компиляции Win64 переменная и бросок, ошибка, если они приводят в порядок не строку, но логику, не работает, как я предназначаю это к. Кто-либо предложил лучшее решение?

17
задан Andreas Niedermair 26 July 2015 в 18:10
поделиться

4 ответа

Включите элемент Condition только в свой 32-битный пакет (т. е. используя инструкцию препроцессора «if»). Условие будет «НЕ Msix64»: условия запуска - это вещи, которые должны быть истинными, поэтому, если установлен Msix64, условие запуска не будет выполнено, а это означает, что это ОС x64 и 32-разрядный пакет, и правильнее всего сделать следующее: блокировать.

15
ответ дан 30 November 2019 в 12:50
поделиться

Мы используем следующее...

<?if $(var.ProcessorArchitecture)=x86 ?>
<Condition Message="!(loc.LaunchCondition_Error64)">
    <![CDATA[Installed OR Not VersionNT64]]>
</Condition>
<?endif?>
7
ответ дан 30 November 2019 в 12:50
поделиться

Элемент условия работает со свойствами установщика Windows, которые существуют во время установки.

Однако вы определяете Win64 как переменную wix, а не свойство установщика Windows. Переменные Wix существуют только во время создания настройки. Вы должны ссылаться на них как на $ (var.MyWixVariable) там, где вы их используете, и препроцессор wix затем заменит их определенным значением.

Я бы попробовал вместо этого:

<?if $(var.Platform) = "x64"?>
<?define PlatformString = "64-bit"?>
<Property Id="Win64" Value="1" />
<?else?>
<?define PlatformString = "32-bit"?>
<?endif?>

Если $ (var.Platform) имеет правильное значение при создании установки, то это приведет к тому, что свойство «Win64» будет записано в окнах база данных установщика (то есть файл MSI) и свойство будут доступны во время установки для использования в элементе условия.

3
ответ дан 30 November 2019 в 12:50
поделиться

Добавьте это условие

<Condition Message="This is designed for 32bit OS">%PROCESSOR_ARCHITECTURE ~= "x86" AND %PROCESSOR_ARCHITEW6432 &lt;&gt; "amd64"></Condition>

Вы можете создать один установщик с 32-битным компонентом и 64-битным компонентом и поместить эти два условия в соответствующие компоненты

<Component Id="bit32Component" Guid="..." Feature="ProductFeature">
    <Condition>%PROCESSOR_ARCHITECTURE~="x86" AND %PROCESSOR_ARCHITEW6432&lt;&gt;"amd64"></Condition>
</Component>
<Component Id="bit64Component" Guid="..." Feature="ProductFeature">
    <Condition>%PROCESSOR_ARCHITECTURE~="amd64" OR %PROCESSOR_ARCHITEW6432~="amd64"></Condition>
</Component>

вот ссылка, которую я использовал

http://blogs.msdn.com/david.wang/archive/2006/03/26/HOWTO-Detect-Process-Bitness.aspx

3
ответ дан 30 November 2019 в 12:50
поделиться
Другие вопросы по тегам:

Похожие вопросы: