Microsoft visual c redistributable 2018: Microsoft Visual C++ 2015-2022 (14.36.32532.0) Redistributable Package — Драйверы — Новости Software
Содержание
c# — Как проверить, установлен ли распространяемый компонент Microsoft Visual C++ 2015 на устройстве
спросил
Изменено
3 года назад
Просмотрено
10 тысяч раз
Как следует из названия, в настоящее время я не могу найти ответы на эту проблему.
Сейчас я использую C# для проверки.
В основном ответы для версии 2013 и ниже.
Если у вас есть предложения, поделитесь ими.
Спасибо.
4
Основной ответ: не беспокойтесь, если он есть во время выполнения. Поместите его в свой установщик. Пусть это будет выполнено как часть обычного процесса установки «Требуются повышенные права».
Если он уже был там, программа установки просто ничего не сделает.
Если его там не было, то теперь он будет работать под правами администратора и потом появится.
Если он был поврежден, надеюсь, установщик исправит установку.
Если это каким-то образом не сработало, ваш жалкий пользовательский код ничего не может сделать, чтобы исправить это во время выполнения. Это работа администраторов.
Это делает каждый установщик, не последними из которых являются Visual Studio и SQL Server. Единственная небольшая модификация, которую я знаю, — это Steam, который запускает эти установщики с повышенными правами до того, как программа будет запущена в первый раз. Но это просто «удостовериться, что он там» под немного другим углом.
Я знаю только одного программиста, который этого не делает: Тот, кто никогда не тестировал свою программу на свежеустановленной Windows (работают виртуальные машины) и поэтому не знает требований, даже существует (потому что любая другая программа устанавливает VC Redist и текущие версии DX).
Трудно получить все значения реестра для VC 2015, поэтому я написал небольшую функцию, которая будет проходить через все зависимости и соответствовать указанной версии (C++ 2015 x86)
public static bool IsVC2015x86Installed() { строка dependenciesPath = @"ПРОГРАММНОЕ ОБЕСПЕЧЕНИЕ\Классы\Установщик\Зависимости"; используя (зависимости RegistryKey = Registry.LocalMachine.OpenSubKey(dependenciesPath)) { если (зависимости == ноль) вернуть ложь; foreach (string subKeyName in dependencies.GetSubKeyNames().Where(n => !n.ToLower().Contains("dotnet") && !n.ToLower().Contains("microsoft"))) { используя (RegistryKey subDir = Registry.LocalMachine.OpenSubKey(dependenciesPath + "\\" + subKeyName)) { var value = subDir.GetValue("DisplayName")?.ToString() ?? нулевой; если (string.IsNullOrEmpty(значение)) продолжить; if (Regex.IsMatch(value, @"C\+\+ 2015.*\(x86\)"))//здесь вы можете указать свою версию. { вернуть истину; } } } } вернуть ложь; }
Зависимости:
использование системы; используя System.Text.RegularExpressions; с помощью Microsoft.Win32;
РЕДАКТИРОВАТЬ:
С++ 2017 является допустимой заменой С++ 2015, поэтому, если вы хотите проверить это, отредактируйте регулярное выражение следующим образом:
Regex.IsMatch(value, @"C\++\+ (2015|2017 ).*\(x86\)")
1
Как упоминалось в комментариях и ответе, один из способов — запустить программу установки и посмотреть, установлена ли более поздняя версия. Программа установки выдаст ошибку и завершит работу.
Если установщик запущен с /quiet
, то ошибка не отображается. Другой способ — просто проверить значения реестра:
Ключ HKEY_LOCAL_MACHINE\SOFTWARE[\Wow6432Node]\Microsoft\VisualStudio\vs-version\VC\Runtimes\{x86|x64|ARM}
версия Visual Studio (14. 0 для Visual Studio 2015 и 2017)
Ключ ARM, x86 или x64 в зависимости от платформы.
Номер версии хранится в строковом значении REG_SZ
Версия . Если устанавливаемый пакет меньше версии установленного, то устанавливать не нужно.
Подробнее здесь: https://learn.microsoft.com/en-us/cpp/ide/redistributing-visual-cpp-files?view=vs-2017
1
Я изменил версию @ssamko, чтобы проверить наличие распространяемых компонентов x64 и x86. Надеюсь, это кому-нибудь поможет:
public static bool IsVC2015Installed() { строка dependenciesPath = @"ПРОГРАММНОЕ ОБЕСПЕЧЕНИЕ\Классы\Установщик\Зависимости"; используя (зависимости RegistryKey = Registry.LocalMachine.OpenSubKey(dependenciesPath)) { если (зависимости == ноль) вернуть ложь; foreach (string subKeyName in dependencies.GetSubKeyNames().Where(n => !n.ToLower().Contains("dotnet") && !n.ToLower().Contains("microsoft"))) { используя (RegistryKey subDir = Registry. LocalMachine.OpenSubKey(dependenciesPath + "\\" + subKeyName)) { var value = subDir.GetValue("DisplayName")?.ToString() ?? нулевой; если (строка.IsNullOrEmpty(значение)) { продолжать; } если (Environment.Is64BitOperatingSystem) { если (Regex.IsMatch(значение, @"C\+\+ 2015.*\((x64|x86)\)")) { вернуть истину; } } еще { если (Regex.IsMatch(значение, @"C\+\+ 2015.*\(x86\)")) { вернуть истину; } } } } } вернуть ложь; }
Зависимости:
использование системы; используя System.Text.RegularExpressions; с помощью Microsoft.Win32;
2
Зарегистрируйтесь или войдите в систему
Зарегистрируйтесь с помощью Google
Зарегистрироваться через Facebook
Зарегистрируйтесь, используя адрес электронной почты и пароль
Опубликовать как гость
Электронная почта
Требуется, но никогда не отображается
Опубликовать как гость
Электронная почта
Требуется, но не отображается
Нажимая «Опубликовать свой ответ», вы соглашаетесь с нашими условиями обслуживания и подтверждаете, что прочитали и поняли нашу политику конфиденциальности и кодекс поведения.