Как я могу заставить мой установщик VS2008 x86 устанавливать x64 сборки на x64?

StackOverflow https://stackoverflow.com/questions/61073

Вопрос

Я использую установщик VS2008 (плюс пользовательское действие Orca) для создания установщика для моего продукта .NET.

Я только недавно узнал, что одна из сторонних сборок, которые я использовал, специфична для x86 (поскольку она включает в себя некоторый машинный код);таким образом, клиенты x64 получали сбои при запуске с ошибками о том, что сборка не подходит для их платформы.

Я отправил такому клиенту копию x64-версии этой сторонней сборки и сказал ему просто скопировать ее поверх существующей x86-версии.Это сработало, милая!Так что теперь мне просто нужно заставить установщик сделать это за меня.

Это на самом деле кажется нетривиальным :(.В идеале я просто хочу, чтобы установщик (который был бы x86, поскольку он может работать на обеих платформах) включал как x86, так и x64 версии этой сторонней сборки и устанавливал соответствующую.Другими словами, мне нужен единый установщик, который облегчит жизнь моим пользователям.

Я думал, что у меня это получилось, используя условные операторы MSI и все такое.Но, по-видимому, нет...проекты установки VS2008 не будут компилироваться, если вы не укажете "x86" или "x64". Если вы укажете x86, это выдаст ошибку компиляции, в которой говорится, что она не может включать сборку x64.Если вы укажете x64, то результат не может быть выполнен на компьютере x86.Черт!

Должно быть, у кого-то уже была эта проблема раньше.К сожалению, Google бесполезен, поэтому я перехожу к StackOverflow!

Это было полезно?

Решение

Если я правильно вас понял, вы хотите скопировать один файл, если вы устанавливаете на x86, и другой файл (с тем же именем), если вы устанавливаете на платформу x64.

Прежде всего, вы не можете создать один MSI для двух разных платформ, поскольку MSI формата x64 просто не будет работать на платформе x86, а MSI формата x86 будет установлен с использованием WOW64 на платформе x64.

С другой стороны, вы МОЖЕТЕ создать один MSI-файл x86, содержащий 2 разные версии файла, и выборочно скопировать подходящий файл во время установки.

Самый простой способ - использовать WIX (V3) вместо встроенного генератора MSI VS2008.WIX дает вам гораздо больший контроль над тем, что и где устанавливается на компьютер клиента, возможность создавать разные программы установки для разных платформ и полную поддержку MSBuild в качестве дополнительного бонуса.(см . http://wix.sourceforge.net для получения дополнительной информации.)

На случай, если вам интересно, что WIX все еще находится в бета-версии, сгенерированные MSI-файлы в полном порядке, и я еще ни разу не сталкивался с ошибкой.(И я зарабатываю на жизнь разработкой установочных проектов.)

Наконец, вы можете проверить с помощью свойства VersionNT64, запущен ли установщик x86 на платформе x64.Если это свойство присутствует, вы работаете под управлением x64, в противном случае вы работаете на x86.

Надеюсь, это поможет.

Другие советы

Когда я изучил это год назад, я пришел к выводу, что это невозможно.Стоит отметить, что многие MSI-файлы, поставляемые Microsoft, поставляются в отдельных версиях x86 и x64 - и, предположительно, они доставили бы только один файл, если бы это было возможно.

Я добился некоторого успеха, используя две функции для выборочного включения двух наборов файлов (в отдельных компонентах, конечно, с их индивидуальными идентификаторами файлов!).

Установка должна быть помечена как x32 для установки как на x32, так и на x64.Он всегда будет устанавливаться в каталоги x32 и в основном будет рассматриваться как 32-разрядное приложение, работающее под управлением WOW.

Используя свойство VersionNT64, вы можете определить, присутствует ли установка Windows 64, и условно установить нужные вам файлы.

Я не уверен, насколько эта функциональность доступна в проектах установки VS2008 - я использую некоторые другие коммерческие инструменты для настройки установщика таким образом.Конечно, вы тоже можете использовать Orca для этого, хотя заставить его работать с коммерческими инструментами было нетривиально, а Orca намного сложнее.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top