Visual c redistributable for visual studio 2015 как проверить что он есть
Как определить, установлен ли распространяемый Visual C++ для Visual Studio 2012?
Я попробовал Google, и никто не задал этот вопрос, сюрприз!
это зависит от того, какую версию вы используете. Эти два ключа 2012 года хорошо работали для меня с соответствующими версиями для загрузки для обновления 4. Обратите внимание, что некоторые из этих местоположений reg могут зависеть от ОС. Я собрал эту информацию из Windows 10 для 64-разрядных . Я просто собираюсь пойти вперед и сбросить все эти версии redist и ключи reg, которые я ищу, чтобы обнаружить установку.:
Visual C++ 2005
Visual C++ 2008
Visual C++ 2010
Visual C++ 2012
Visual C++ 2013
Visual C++ 2015
Visual C++ 2017
предостережение: либо используется новое соглашение о реестре 2017 года, либо оно еще не завершено. Как я предполагаю, самые верхние ключи: [HKEY_CLASSES_ROOT\Installer\Dependencies\,,amd64,14.0,bundle] и [HKEY_CLASSES_ROOT\Installer\Dependencies\,,x86,14.0,bundle]
подлежат изменению или, по крайней мере, имеют разные вложенные GUID, я собираюсь использовать список ключей, который заканчивается идентификатор GUID.
список изменений:
Сентябрь 12th, 2018 -- добавлена версия предостережение к обновлению 2012 4 за выводы Вай Ха Ли
Август 24th, 2018 -- Обновленная версия 2017 для 14.15.26706, обновленные зависимости Visual C++, упакованные с VS 2017 15.8.1
Май 16th, 2018 -- Обновленная версия 2017 для 14.14.26405.0 как новая запись c++ 2017
Сентябрь 8th, 2017 -- обновленная версия 2017 для 14.11.25325.0 как новая запись Visual C++ 2017
Апрель 7th, 2017 -- обновленная версия 2017 14.10.25008.0 как новая запись Visual C++ 2017
Октябрь 24th, 2016 -- обновленная информация о версии 2015 для 14.0.24215.1
Август 18th, 2016 -- обновленная информация о версии 2015 для 14.0.24212
27-го мая 2016 г.-обновлена информация для обновления MSVC2015 2
пожалуйста, свяжитесь со мной здесь, если любой из них устарели.
в качестве отправной точки. Я буду использовать это как проверку для установки среды выполнения VC++ 11 (VS 2012).
вы можете проверить Installed значение 1 в этом разделе реестра: HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\VisualStudio.0\VC\Runtimes\x86 на 64-битных системах. В коде, который приведет к доступу к разделу реестра HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\VisualStudio.0\VC\Runtimes\x86 . Обратите внимание на отсутствие Wow6432Node .
в 32-разрядной системе Реестр такой же без Wow6432Node : HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\VisualStudio.0\VC\Runtimes\x86
в манифесте пакета начальной загрузки, поставляемом с Visual C++, отсутствует элемент installcheck. Думаю, Microsoft хочет всегда устанавливать, если вы установите его в качестве предварительного условия.
конечно, вы все еще можете вызвать MsiQueryProductState, чтобы проверить, установлен ли пакет VC redist через MSI, код пакета можно найти, запустив
в командной строке или, если вы уже находитесь в wmic: root\cli, запустите
сложность связана с тем, что существует (и было) много версий времени выполнения VC, которые могут привести к тому, что, хотя время выполнения VC10 было установлено, их номер сборки был недостаточно недавним, поэтому ваш EXE не запустится, если вы не установили очень точное время выполнения, которое вам требуется, или одно из новые среды выполнения, которые позволяют этой и предыдущих версий для той же основной версии, чтобы работать с ним (бок о бок ад). Кроме того, если у вас есть 64-битный EXE, вам придется проверить как 32, так и 64-битное время выполнения.
тем не менее, единственный надежный способ определить, установлено ли время выполнения для вашего EXE это попытка запустить EXE - или другой EXE, который построен с теми же настройками, что и ваш основной EXE, и единственная цель которого - ничего не делать. Просто беги. (что означает, что время выполнения установлено) или не выполняется (если не установлено).
Я сделал следующее для установщика, который требовал установки 32-разрядных и 64-разрядных сред выполнения VC10: установщик пытается запустить все фиктивные EXEs, и если это удастся, соответствующая среда выполнения считается установленной. Это также разрешает 32/64-разрядный сценарий.
C++ dummy EXE может быть построен с помощью проекта со следующим кодом (и еще один в 64-битной конфигурации, если необходимо):
не забудьте установить свойства проекта использование MFC to использовать MFC в общей DLL. Исполняемые файлы будут иметь размер около 4 КБ - небольшая цена, чтобы заплатить за верный результат.
чтобы дать пользователям хороший опыт установки, вы можете сделать следующее (пример кода для NSIS):
и вызовите его в функции, например CheckRuntimes
затем сделайте раздел только для чтения в дереве установки и предварительно выберите или снимите его с функции a, которая выполняется перед компоненты страница.
Это гарантирует, что установка каждого отсутствующего компонента среды выполнения обязательна и пропускается, если он уже присутствует.
поскольку Visual Studio 2010 и более поздние версии перестали использовать WinSxS, может быть достаточно просто проверить %windir%\system32\msvcr110.файл DLL. Если вы хотите убедиться, что у вас достаточно новая версия, вы можете проверить, является ли версия файла 11.0.50727.1 (VS2012 RTM) или 11.0.51106.1 (VS2012 Update 1).
для меня это место работал: HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\DevDiv\vc\обслуживание\11.0\RuntimeMinimum\версия
проверьте, какая версия у вас есть после установки пакета и используйте это в качестве условия в установщике. (мой установлен в 11.0.50727 после установки VCred).
просто перейдите в Панель управления > Программы и функции, и все они отображаются там.
Я не эксперт, и этот ответ довольно прост по сравнению с тем, что люди отвечают (проверка реестра), поэтому я не уверен, что это правильный ответ, но он сделал трюк для меня.
As the title says, I currently cannot find any answers for this problem.
Mostly answers are for version 2013 and below.
If you guys have any suggestion, do share.
Do you have a single-file requirement, or would you consider having a C++/CLI mixed-mode assembly? If you can load the assembly, the redist is there. If it throws an exception, you're missing something.
Just never ever do this. It is the job of the vcredist installer to do this. You need it anyway when you'd find out that it isn't present, so just always run it.
If you look at any game in steam, you will find a folder "_CommonRedist", containing both the VC Redist (2010) and DX 9 June 2010 installers. And they are dilligently executed on the first start of the programm. Do the same thing as everyone else: Always have the setups and always run them as part of the instaler with Admin rights. And if that should fail, there is nothing you could do about it anyway :)
4 Answers 4
It is hard to get all registry values for VC 2015 so I have written a small function which will go through all dependencies and match on specified version(C++ 2015 x86)
EDIT:
C++ 2017 is valid replacement for C++ 2015 so if you want to check it as well edit the regex like this:
The basic answer is: Do not bother if it is there at runtime. Put it into your installer. Let it be executed as part of the normal "Elevated Rights required" Installation process.
If it was already there, the Installer will just do nothing.
If it was not there, it will now run under Administrator rights and be there afterwards.
If it was damaged, hopefully the installer will fix the installation.
If that somehow did not work, there is nothing your puny usercode can do to fix it at runtime. It is the administrators job.
Every installer does that, not the least of which are the Visual Studio and SQL Server ones. The only slight modification I know off is Steam, which runs those installers under Elevated rights before a program is executed for the first time. But that is just "making certain it is there" from a slightly different angle.
I only know one kind of programmer that does not do that: The one never tested his program on a freshly installed Windows (Virtual Machines work) and thus is not aware the requirements even exists (because every other program installs VC Redist and current DX versions).
So I guess the question is, how to efficiently detect the presense of Visual C++ 2015 Redistributable in the per user installer.
I wonder if you can eliminate the dependency on the runtime altogether by static linking? Not sure if that works anymore. Static linking is not great (loss of shared fixes, especially security fixes), but sometimes it gets the job done. If you deliver regular updates for your application, it should be OK? To test, maybe run on a pristine virtual. And you can have a peek with dependency scanners too.
The more I look at this, the more I wonder if the least worst approach is to check for the presence and version of the file vcruntime140.dll in the System32 folder (64-bit version) and SysWOW64 folder (32-bit version)? There are several other ways, I might get to take a further look tomorrow. See files list towards bottom here.
For testing purposes here is a quick VBScript: Set fso = CreateObject("Scripting.FileSystemObject") : MsgBox fso.GetFileVersion("C:\Windows\System32\vcruntime140.dll")
I added an answer I wrote. A bit over the top, but I have tried to summarize various approaches. Including also bad options - just to remember why they are bad. I would go for File Presence & Version Check.
2 Answers 2
Runtime Detection Approaches
I can find a few ways to detect the presence of the Visual C++ Runtime.
Registry
- Keys used by the VCRedist installer (see section below)
File Presence & Version Check
- Check for presence of core runtime files
- See separate section below
MSI API
- You can detect whether a specific MSI is installed by looking up the product GUID
- Reliable, but hard to keep track of all product GUIDs (different versions)
- UPDATE: You can also use the upgrade code as described below. It should remain stable across releases and updates (for each major version and potentially between major versions as well).
Fall-Over EXE?
- Suggestions are seen to use an EXE depending on the runtime
- Launching it and failing means the runtime is not there or broken
Good & Bad - Evaluation: Option 1 seems to be vulnerable since the merge module variant of deploying the runtime might not write these keys. Option 3 might work well, but it is hard to keep track of all GUIDs. Option 4 seems to already have failed based on the newer runtimes removing certain registry keys. Though fixed now, this could resurface.
File Version Presence / Version Check
The more I look at this, the more I start to think that you have to check for the actual files themselves, and potentially for the right file version. The file vcruntime140.dll in the System32 folder (64-bit version) and SysWOW64 folder (32-bit version)? See files list towards bottom here.
Just adding a link for safe-keeping.
A test VBScript - for test purposes only (scripts are sometimes blocked by anti-virus):
You can detect file presence and version using AppSearch in an MSI file.
Below are some other stuff I wrote up, just leaving it in.
VCRedist
It seems the Visual C++ Redistributable Packages ( VCRedist_x86.exe , VCRedist_x64.exe ) - which is the recommende way to deploy the runtime - checks the following registry key to determine what versions of the runtime is actually installed:
The sub-keys x86 and x64 seem to all contain an "Installed" value that is set to 1 when the runtime is installed. I would assume - without having had time to test it all - that you then can check:
- HKLM\SOFTWARE\WOW6432Node\Microsoft\VisualStudio\14.0\VC\Runtimes\x64 Installed = 1
- HKLM\SOFTWARE\WOW6432Node\Microsoft\VisualStudio\14.0\VC\Runtimes\x86 Installed = 1
Merge Module: After a brief check, it looks like these values are not written by the merge modules that can also be used to distribute this runtime. I do not have the time or means to check this properly now.
Astonishingly both version 2015 and version 2017 of the runtime write to the 14.0 key - since they are binary compatible. If the 2017 version is installed, then the VCRedist executable will return an error since no install is needed. Weird indeed. But for your purpose that should be besides the point. Source.
MSI API - Retrieve Product Codes
UPDATE: installer.ProductState - normal installed state is 5 :
I forgot about the ProductState property when writing the below. You can check for an installed product with two lines of code if you have the actual product code:
Tip: I wouldn't use this approach seeing as the product code changes frequently when products are updated. Hence I like better to check for file versions of core-runtime files. This seems more reliable for the future (provided version parsing is done correctly and reliably - don't roll your own).
Mockup:
Update based on Zett42's suggestion to enumerate products sharing the same upgrade code:
Deploying The Visual Studio C++ Runtime
Beyond detection, there are several approaches for distributing the Visual Studio C++ Runtime:
- Static Linking
- Visual C++ Redistributable Packages
- VCRedist_x86.exe , VCRedist_x64.exe , or VCRedist_arm.exe
- Program Files(x86)\Microsoft Visual Studio\2017\edition\VC\Redist\MSVC\lib-version
- Redistributable Merge Modules ( .msm files )
- Insufficient for some purposes (The universal CRT):
- Local Application Folder
- Copy DLLs to the local application folder
- Not recommended for servicing reasons (updates, security fixes)
Links For Safe Keeping:
Old Answer
There is this old post. I am not too fond of direct registry reads, let me see if I can find a more reliable way, but maybe have a look in the mean time: Detect if Visual C++ Redistributable for Visual Studio 2012 is installed
Just one more link, how to find the Windows Installer product code of products that are installed: How can I find the product GUID of an installed MSI setup?
Вы находитесь здесь, так как ищете скачивание одного из файлов среды выполнения Visual C++? Перейдите на страницу последних поддерживаемых Распространяемый компонент Visual C++ скачивания.
Распространяемые файлы и лицензирование
При развертывании приложения необходимо также развернуть файлы, поддерживающие это приложение. Если какой-либо из этих файлов предоставляется корпорацией Майкрософт, проверьте, разрешено ли повторно распространять их. Вы найдете ссылку на условия лицензии Visual Studio в интегрированной среде разработки. Используйте ссылку "Условия лицензии" в диалоговом окне "О Microsoft Visual Studio". Также можно скачать соответствующие EULA и лицензии из каталога лицензий Visual Studio.
Чтобы просмотреть список REDIST, на который ссылается раздел "Распространяемый код" Visual Studio 2022 условия лицензионного соглашения на использование программного обеспечения Майкрософт, см. раздел "Файлы распространяемого кода" для Microsoft Visual Studio 2022 г.
Чтобы просмотреть список REDIST, на который ссылается раздел "Распространяемый код" условий лицензионного соглашения на Visual Studio 2019 г., см. раздел "Файлы распространяемого кода" для Microsoft Visual Studio 2019 г.
Чтобы просмотреть список REDIST, на который ссылается раздел "Распространяемый код" Visual Studio 2017 условий лицензионного соглашения на использование программного обеспечения Майкрософт, см. раздел "Файлы распространяемого кода" для Microsoft Visual Studio 2017 года.
Чтобы просмотреть список REDIST, на который ссылается раздел "Распространяемый код" Visual Studio 2015 условий лицензионного соглашения на использование программного обеспечения Майкрософт, см. раздел "Файлы распространяемого кода" для Microsoft Visual Studio 2015 года.
Дополнительные сведения о распространяемых файлах см. в разделе "Определение библиотек DLL для распространения и примеров развертывания".
Поиск распространяемых файлов
Для развертывания распространяемых файлов можно использовать распространяемые пакеты, установленные Visual Studio. В версиях Visual Studio с 2017 года эти файлы называются vc_redist.arm64.exe и vc_redist.x64.exe vc_redist.x86.exe . В Visual Studio 2015, 2017 и 2019 годах они также доступны под именами vcredist_x86.exe , vcredist_x64.exe и (только 2015). vcredist_arm.exe
Самый простой способ найти распространяемые файлы — использовать переменные среды, заданные в командной строке разработчика. В Visual Studio 2022 распространяемые файлы находятся в папке %VCINSTALLDIR%Redist\MSVC\v143 . В последней версии Visual Studio 2019 вы найдете распространяемые файлы в папке %VCINSTALLDIR%Redist\MSVC\v142 . В Visual Studio 2017 и Visual Studio 2019, они также находятся в %VCToolsRedistDir% . В Visual Studio 2015 эти файлы можно найти в %VCINSTALLDIR%redist\ расположении языкового стандарта распространяемых пакетов.
В Visual Studio 2022 и 2019 файлы модулей слияния являются частью дополнительно устанавливаемого компонента с именем распространяемых MSM версии> C++ в Visual Studio Installer. Модули слияния устанавливаются по умолчанию как часть установки C++ в Visual Studio 2017 и Visual Studio 2015. При установке в Visual Studio 2022 вы найдете распространяемые модули слияния в %VCINSTALLDIR%Redist\MSVC\v143\MergeModules . В последней версии Visual Studio 2019 распространяемые модули слияния находятся в %VCINSTALLDIR%Redist\MSVC\v142\MergeModules . В обоих Visual Studio 2019 и Visual Studio 2017 года они также находятся в %VCToolsRedistDir%MergeModules . В Visual Studio 2015 года они находятся в Program Files [(x86)]\Common Files\Merge Modules .
Установка распространяемых пакетов
Распространяемые пакеты Visual C++ позволяют устанавливать и регистрировать все библиотеки Visual C++. Если вы используете его, запустите его в качестве необходимого компонента в целевой системе перед установкой приложения. Рекомендуется использовать эти пакеты для развертываний, поскольку они включают функцию автоматического обновления библиотек Visual C++. Пример использования этих пакетов см. в разделе Пошаговое руководство. Развертывание приложения Visual C++ с помощью распространяемого пакета Visual C++.
Установка распространяемых модулей слияния
Модули слияния ( .msm файлы) для Распространяемый компонент Visual C++ файлов устарели. Мы не рекомендуем использовать их для развертывания приложений. Вместо этого рекомендуется централизованное развертывание пакета Распространяемый компонент Visual C++. Централизованное развертывание распространяемым пакетом позволяет корпорации Майкрософт обслуживать файлы библиотеки среды выполнения независимо. Кроме того, удаление приложения не может повлиять на другие приложения, которые также используют централизованное развертывание. При использовании распространяемого пакета для централизованного развертывания вы не несете ответственности за отслеживание и обслуживание библиотек среды выполнения. В противном случае обновление файлов библиотеки среды выполнения требует обновления и повторного развертывания установщика .msi . Ваше приложение может быть уязвимо к ошибкам или проблемам безопасности до тех пор, пока вы не сделаете это.
Распространяемые модули слияния должны быть включены в пакет установщика Windows (или аналогичный пакет установки), используемый для развертывания приложения. Дополнительные сведения см. в разделе "Распространение с помощью модулей слияния". Пример см. в пошаговом руководстве. Развертывание приложения Visual C++ с помощью проекта установки.
Установка отдельных распространяемых файлов
Также можно напрямую установить распространяемые библиотеки DLL в локальной папке приложения. Локальная папка приложения — это папка, содержащая исполняемый файл приложения. По соображениям обслуживания мы не рекомендуем использовать это расположение установки.
Потенциальные ошибки во время выполнения
Чтобы устранить эту ошибку, убедитесь, что установщик приложения выполняет сборку правильно. Убедитесь, что распространяемые библиотеки правильно развернуты в целевой системе. Дополнительные сведения см. в разделе Основные сведения о зависимостях приложения Visual C++.
Связанные статьи
Распространение с помощью модулей слияния
Описывает, как использовать модули слияния Распространяемый компонент Visual C++ для установки библиотек среды выполнения Visual C++ в качестве общих библиотек DLL в папке %windir%\system32\ .
Распространение элементов управления ActiveX в Visual C++
Описание процедуры повторного распространения приложения, которое использует элементы управления ActiveX.
Распространение библиотеки MFC
Описание процедуры повторного распространения приложения, которое использует MFC.
Повторное распространение приложения ATL
Описание способа распространения приложения, которое использует ATL. В Visual Studio 2012 и более поздних версиях библиотека ATL не требуется.
Примеры развертывания
Ссылки на примеры, демонстрирующие развертывание приложений Visual C++.
Развертывание классических приложений
Представлены технологии развертывания Visual C++ и связанные понятия.
This forum has migrated to Microsoft Q&A. Visit Microsoft Q&A to post new questions.
Answered by:
Question
How do I tell what version of "Visual C++" I have on my computer? Is it possible to have more than one? Because the person I bought my program gives me links to update 2005 and 2008. :)
Answers
For the VC++ runtime packages, you can check them easily from Control Panel -> Programs and Features (Add/remove programs in XP). You will find all installed Visual C++ Redistributable in your system.
You can install multiple versions runtime package in the system. They work side by side and they don’t have the downward compatibility. For example, suppose a program targets to VC++ 2005 runtime, it will not work without VC++2005 package even the VC++ 2008 packaged installed, vice versa.
If you want to uninstall some older version of runtime, please don’t. I recommend you keep all of them.
If you have any concern, please let me know.
Please remember to mark the replies as answers if they help and unmark them if they provide no help.
Welcome to the All-In-One Code Framework! If you have any feedback, please tell us.
All replies
If you mean the VC++ runtime DLLs, you probably do have multiple versions on your machine.
If you mean the Visual C++ IDE (or rather Visual Studio) I'd be very surprised if you couldn't just run it and see for yourself what version you have.
haha. We'll I'd say I'm refering to VC++ runtime DLLs then :) How would I check to see what I have? Is there a cmd? or a program? :)
You could query the registry to see what versions are installed. Example, for VC++ 2010, see this blog entry:
For the VC++ runtime packages, you can check them easily from Control Panel -> Programs and Features (Add/remove programs in XP). You will find all installed Visual C++ Redistributable in your system.
You can install multiple versions runtime package in the system. They work side by side and they don’t have the downward compatibility. For example, suppose a program targets to VC++ 2005 runtime, it will not work without VC++2005 package even the VC++ 2008 packaged installed, vice versa.
If you want to uninstall some older version of runtime, please don’t. I recommend you keep all of them.
If you have any concern, please let me know.
Please remember to mark the replies as answers if they help and unmark them if they provide no help.
Welcome to the All-In-One Code Framework! If you have any feedback, please tell us.
go to help and click about visual studio. there you will see all the component's versions of visual studio.. :) - Vinay
Your suggestion for checking to find out what version of the C++ Redistributable is for XP? Support for that ended years ago, and most of the industry is now working toward getting away from 7 or 8 and going to 10, if not already there. How do you find the versions you have with Windows 7 or 10?
The post that you replied to was also posted years ago, in 2010 when XP support was still active and a lot more people were using XP.
With Windows 7 and 10 it is pretty much the same. There is Control Panel->Programs and features that does work for all post XP versions of Windows. For Windows 10, there is also Apps & Features in the modern settings.
This is a signature. Any samples given are not meant to have error checking or show best practices. They are meant to just illustrate a point. I may also give inefficient code or introduce some problems to discourage copy/paste coding. This is because the major point of my posts is to aid in the learning process.
Читайте также: