Ориентируйтесь как на x86, так и на x64 в установщике Windows (VS2008) - PullRequest
3 голосов
/ 21 июля 2011

Есть ли способ создать установщик Windows с использованием Visual Studio 2008 для операционных систем x86 и x64.

В свойстве TargetPlatform я просто: x86, x64, Itanium. И я знаю, что где-то есть еще одна под названием Any CPU, но я не могу ее найти.

Кроме того, я не хочу создавать две программы установки.

Есть идеи?

Спасибо.

Ответы [ 3 ]

4 голосов
/ 21 июля 2011

Это может быть сделано, но не напрямую с Visual Studio. Общий подход таков:

  • создать общий MSI, который содержит как 32-битные, так и 64-битные ресурсы
  • create MST-преобразования (одно для 32-разрядных и одно для 64-разрядных), которые изменяют MSI на основе целевой платформы
  • используйте загрузчик EXE для динамического определения платформы и применения правильного преобразования к вашему MSI

Вы можете создавать преобразования с помощью Orca . Если вам нужно коммерческое решение, вы можете попробовать Advanced Installer или InstallShield.

Если это кажется слишком сложным, вы можете просто использовать отдельные 32-битные и 64-битные пакеты.

3 голосов
/ 21 июля 2011

Это можно сделать, но не с помощью установщика VS. У меня есть коллега, который достиг этого с помощью продукта InstallShield, но позвольте мне сказать, что это был абсолютный взлом, и в итоге он добился гораздо лучшего результата, сделав два различных установщика, по одному для каждой целевой битности.

Мне также нужно просветить вас:

В свойстве TargetPlatform у меня есть только: x86, x64, Itanium. И я знаю, что где-то есть еще один, который называется Any CPU

Свойство TargetPlatform не изменяет разрядность устанавливаемого приложения, вы смешиваете его с целевой платформой самих сборок. MSI - средство доставки, сборки .Net в нем - полезная нагрузка. Параметр TargetPlatform в MSI не управляет компиляцией JIT-сборок .Net, а используется для определения путей установки (если он установлен на x86, то путь установки по умолчанию должен быть %PROGRAMFILES(x86)%, а другой Ульи реестра будут целевыми.

1 голос
/ 21 июля 2011

Я могу ошибаться, но я почти уверен, что это невозможно. Упомянутый вами Any-CPU используется компилятором .Net для ваших сборок (сборки .Net по умолчанию не зависят от архитектуры, но их можно принудительно скомпилировать как x86 или x64). Но так как Windows-Installer является родным файлом win32, он не может быть сгенерирован как «Any-CPU». Таким образом, вы должны сгенерировать 2 одинаковых установщика по одному для x86 и x64.

...