Как мне сделать, чтобы мой установщик VS2008 x86 установил сборки x64 на x64? - PullRequest
5 голосов
/ 14 сентября 2008

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

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

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

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

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

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

Ответы [ 3 ]

6 голосов
/ 14 сентября 2008

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

3 голосов
/ 09 декабря 2008

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

Прежде всего, вы не можете создать один MSI для 2 разных платформ, поскольку 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.

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

1 голос
/ 05 ноября 2008

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

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

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

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

...