Мое приложение C++ создано с помощью Visual Studio 2022 v17.4, в которой есть инструменты MSVC 14.34.31933
, а затем с помощью набора инструментов WiX создается установочный пакет Windows .MSI.
Product.wxs
файл содержит следующие строки для включения распространяемого компонента VC:
<DirectoryRef Id = "TARGETDIR">
<Merge Id = "VCRedist" SourceFile = "$(env.ProgramW6432)\Microsoft Visual Studio\2022\Community\VC\Redist\MSVC\v143\MergeModules\Microsoft_VC143_CRT_x64.msm" DiskId = "1" Language = "0"/>
</DirectoryRef>
<Feature Id = "VCRedist" Title = "Microsoft VC143 CRT" AllowAdvertise = "no" Display = "hidden" Level = "1">
<MergeRef Id = "VCRedist"/>
</Feature>
С выходом Visual Studio 2022 v17.10 выяснилось, что мой установщик перезаписывает более новую C:\Windows\System32\msvcp140.dll
версию 14.40.33810.0
более старой версией 14.34.31931.0
. После этого все программы, созданные в последней версии Visual Studio , вылетают при запуске из-за std::mutex::lock()
несовместимости.
В журнале установки, выданной командой:
msiexec /i myapp.msi /L*V install.log
Я понимаю
MSI (s) (D0:7C) [12:07:18:334]: Feature: VCRedist; Installed: Absent; Request: Local; Action: Local
...
MSI (s) (D0:7C) [12:07:18:344]: Component: msvcp140.dll_system_amd64.DFEFC2FE_EEE6_424C_841B_D4E66F0C84A3; Installed: Absent; Request: Local; Action: Local
как будто новый распространяемый файл вообще не найден.
Что необходимо изменить в проекте WiX, чтобы файл .MSI устанавливал распространяемый MSVC только в том случае, если он новее, чем уже есть в системе, и не менял его в противном случае?
В этих строках журнала просто говорится, что компонент не зарегистрирован на компьютере. Проблема не в них. Позже в файле журнала вы увидите сообщения о фактически устанавливаемых файлах, и они более полезны.
Могу поспорить, что у вас REINSTALLMODE
настроена принудительная перезапись. Но вы не предоставляете достаточно информации о том, что нужно знать вашему коду.
Спасибо. Действительно,
REINSTALLMODE
было установлено на"amus"
(a
вместоo
). И возврат его к значению по умолчанию устранил проблему.