Распространяемые материалы для развертывания С++ exe, разработанные с помощью Visual Studio 2015 в Windows 7

Я разработал 32-битное приложение С++ с использованием Visual Studio 2015 (в Windows 10). Я хочу развернуть его на компьютерах под управлением Windows 7 и более поздних версий.

Я собрал установщик WiX и включил распространяемый модуль слияния VС++, как описано здесь. Включенный модуль слияния был C:\Program Files (x86)\Common Files\Merge Modules\Microsoft_VC140_CRT_x86.msm.

Этот установщик работает нормально, но в Windows 7 установленная программа не запускается, жалуясь на отсутствие api-ms-win-crt-runtime-l1-1-0.dll.

Из поиска я подозреваю, что в распространяемом пакете vc_redist.x86.exe из здесь могут быть дополнительные файлы, но документы WiX говорят мне использовать msm, а не Exe.

Также возможно, что модуль слияния не смог установить. Я не видел никаких ошибок, но я не перезапускал его с включенными журналами, чтобы проверить эту возможность.

Другим вариантом может быть использование burn, но я не знаком с этим инструментом; Я поеду по этому маршруту, если он будет правильным, но я предпочел бы придерживаться MSI, если это возможно.

Ответ 1

Распространяемые компоненты VС++ во время выполнения стали более сложными в Visual Studio 2015. См. сообщение в блоге команды VC об универсальном ЭЛТ. В принципе, модуль слияния недостаточен:

Не будет модуля слияния для Universal CRT. Если вы в настоящее время используете модули слияния CRT и по-прежнему хотите развернуть библиотеки Visual С++ централизованно, мы рекомендуем перейти к вышеупомянутому пакету Windows Update или к VCRedist. Кроме того, вы можете установить статичное связывание с Universal CRT и библиотеками Visual С++.

Ответ 2

Мы столкнулись с проблемой, что пакет MSI не смог установить распространяемое с помощью MSI Error 1618: 'Another installation is already in progress' during installation/uninstallation.. Мы установили 2015 год, распространяемый с WIX, с помощью Bootstraper. Например:

<Chain>
  <!-- Microsoft Visual C++ 2015 x86 libraries -->
  <ExePackage Cache="no" Compressed="yes" PerMachine="yes" Permanent="yes" Vital="yes"
     SourceFile="EXAMPLE_PATH\vc_redist.x86.exe" InstallCommand="/install /passive /norestart">
  </ExePackage>

  <MsiPackage Id="MainPackage" SourceFile="YOUR_MSI_PACKAGE.msi" DisplayInternalUI="no" Compressed="yes" Vital="yes"/>
</Chain>

Ответ 3

Стоит отметить, что теперь можно распространять DLL Universal C Runtime с вашим приложением. Сообщение в блоге MSDN описывает шаги:

  • Установить пакет Windnows 10 SDK
  • Перейдите в C:\Program Files (x86)\Windows Kits\10\Redist\ucrt и найдите библиотеки DLL для платформы, на которую настроен таргетинг.
  • Скопируйте их в каталог своей программы

Они не большие. Всего около 2 мегабайт.

В результате я использовал эту технику, потому что:

  • Мне не нужно создавать отдельный пакет WiX, а затем загружать их,
  • Он не требует от пользователя запуска дополнительных инсталляторов

Я не могу говорить о том, будет ли он работать на всех компьютерах, но он работает над теми, которые я тестировал.