Как реализовать единый установщик для 32 и 64 платформ - PullRequest
21 голосов
/ 17 декабря 2009

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

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

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

Ответы [ 4 ]

28 голосов
/ 18 декабря 2009

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

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

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

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

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

MSI не может быть помечен как 32- и 64-разрядный. Тоже ничего не поделаешь.

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

3 голосов
/ 18 декабря 2009

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

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

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

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

1 голос
/ 07 февраля 2013

Вы можете попробовать использовать переменную среды 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 применять во время выполнения, в зависимости от архитектуры ОС, хотя я не пробовал это и не знаю точно, как это сделать, если я узнаю, я обязательно опубликую ответ.

1 голос
/ 17 декабря 2009

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

...