Распространяемые файлы для развертывания 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 описаны шаги:
- Установите Windnows 10 SDK
- Идти к
C:\Program Files (x86)\Windows Kits\10\Redist\ucrt
и найдите библиотеки DLL для целевой платформы - Скопируйте их в программный каталог вашего приложения
Они не большие. Всего около 2 мегабайт.
В итоге я использовал эту технику, потому что:
- Это не требует, чтобы я создал отдельный пакет WiX и затем загрузил их;
- Он не требует от пользователя запуска дополнительных инсталляторов.
Я не могу сказать, будет ли он работать на всех компьютерах, но он работает на тех, которые я тестировал.