Подтвердить что ты не робот

Как реализовать единый инсталлятор для 32 и 64 платформ

Я работаю над установщиком на основе WIX.

Установщик создает 32 и 64 платформы отдельно. Версии инсталляторов очень схожи на обеих платформах, но несколько условных шагов, таких как, например, не регистрировать собственные DLL файлы x64 в 32-разрядном установщике.

Есть ли способ объединить обоих установщиков к одному?

4b9b3361

Ответ 1

Это невозможно. Это ограничение для Windows Installer, если вы хотите сделать это, не делая его в два раза большим, вам понадобятся два MSI с внешними CAB файлами и загрузочный загрузчик, чтобы выполнить правильную установку.

Если вам не нужен MSI, попробуйте NSIS. Вы можете легко выполнить условную установку на основе архитектуры ОС.

В любом случае, это было также задано в списке пользователей WiX несколько раз за последние недели, лучший ответ, который я могу найти, - это этот из Блэра:

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

MSI, помеченный как 32-разрядный, просто не может помещать файлы в "64-битный каталог", (они будут перенаправлены в 32-разрядные "эквивалентные" папки). Ничто не может сделать.

MSI не может быть помечен как 32-, так и 64-битный. Также вы ничего не можете сделать.

"Правильный" метод заключается в создании двух MSI, один для 32-битных платформ и другой для 64-битных платформ. Они могут использовать одни и те же внешние файлы кабины, если вам нужно отправить их вместе, чтобы сэкономить место. Если вы это сделаете, вы можете использовать bootstrapper, чтобы извлечь соответствующий с помощью CAB (ов) и установить его.

Ответ 2

Возможно, в какой-то степени. Однако вы не можете сделать это с помощью MSI. Примером этого являются пакеты установщика Microsoft.NET; пакет "полная установка" имеет бит x86, x64 бит и ia64. Однако для этого установщик использует процесс начальной загрузки; он имеет отдельную программу, которая точно определяет, что устанавливать, а затем устанавливает ее. Внизу вам все равно нужны 32-битные MSI и 64-разрядные пакеты MSI.

Будьте осторожны; тогда архитектура вашего загрузчика-установщика определит, на что он может быть установлен. Если это загрузочный загрузочный диск на основе x86, то он будет работать только на 32-битных окнах и 64-битных окнах с установленным WOW64 (съемный вариант с Win2k8 R2) и может вообще не работать на платформах ia64!

На самом деле гораздо проще предоставить отдельным установщикам, что просто не стоит их связывать. Вы удвоите или утроите размер установщика, который может просто отключить некоторых клиентов. Если это внутренний инструмент, то на самом деле нет недостатков - наличие доступного доступного msi позволяет использовать еще многие (удаленные) варианты установки.

Короче: да, вы можете, но не с MSI.

Ответ 3

Я не знаю достаточно о WiX, чтобы сказать наверняка, но анекдотические данные свидетельствуют о том, что это не рекомендуется. Мне напоминают обо всех загрузках, которые я вижу (MSDN и многие другие), где вы должны выбрать между 32-битным и 64-разрядным установщиком. На самом деле теперь, когда я думаю об этом, я никогда не видел и не слышал о "универсальном установщике".

Ответ 4

Вы можете попробовать использовать переменную среды PROCESSOR_ARCHITECTURE в условных тегах для компонентов в реестре только для того, что необходимо зарегистрировать для конкретной архитектуры, и это будет применяться, когда MSI будет запущен... не при его создании.

Пример для обнаружения 64-битной ОС:

<Component Id="..." Guid="PUT-GUID-HERE">
  <Condition>NOT(%PROCESSOR_ARCHITECTURE = "x86")</Condition>
  ...
</Component>


Пример для обнаружения 32-разрядной ОС:

<Component Id="..." Guid="PUT-GUID-HERE">
  <Condition>%PROCESSOR_ARCHITECTURE = "x86"</Condition>
  ...
</Component>


Если вы хотите узнать больше о ссылках переменных среды в MSI, см. Эту страницу: http://msdn.microsoft.com/en-us/library/windows/desktop/aa368012(v=vs.85).aspx#Access_Prefixes

Для получения дополнительной информации о том, что именно PROCESSOR_ARCHITECTURE вернется в каких обстоятельствах, см. Эту страницу: https://superuser.com/q/396267/117857

Однако, как указано в комментариях к этому ответу, это может быть не совсем то, что вы ищете. Но я бы подумал (не проверял), что вы могли бы создать загрузочный блок, содержащий как 32-битные, так и 64-битные MSI, а затем попросить загрузчика выбрать, какой MSI применять во время выполнения, зависящий от архитектуры ОС, хотя я этого не пробовал, я точно знаю, как это сделать, если я узнаю, я обязательно отправлю ответ.