Распространяемые файлы для развертывания C++ exe, разработанные в Visual Studio 2015 в Windows 7

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

Я собрал установщик WiX и включил распространяемый модуль слияния VC++, как описано здесь. Модуль слияния, который я включил, был 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, если это возможно.

3 ответа

Решение

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

Не будет модуля слияния для универсального ЭЛТ. Если вы в настоящее время используете модули слияния CRT и по-прежнему хотите централизованно развертывать библиотеки Visual C++, мы рекомендуем перейти к вышеупомянутому пакету Центра обновления Windows или к VCRedist. В качестве альтернативы вы можете выбрать статическую ссылку на библиотеки Universal CRT и Visual C++.

Мы столкнулись с проблемой, что пакет 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>

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

  1. Установите Windnows 10 SDK
  2. Идти к C:\Program Files (x86)\Windows Kits\10\Redist\ucrt и найдите библиотеки DLL для целевой платформы
  3. Скопируйте их в программный каталог вашего приложения

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

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

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

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

Другие вопросы по тегам