Программно проверить установленный Visual C++ 2015
Цитата: Михаил от 11.07.2023, 13:22Доброго времени суток!
Кто-нибудь, покажите пожалуйста, как можно через C# написать простенькую boolean функцию, которая будет куда-то лезть в систему и проверять наличие установленного Visual C++ 2015?
Доброго времени суток!
Кто-нибудь, покажите пожалуйста, как можно через C# написать простенькую boolean функцию, которая будет куда-то лезть в систему и проверять наличие установленного Visual C++ 2015?
Цитата: Сергей от 11.07.2023, 14:41Привет.
Написал код по запросу, но возможно можно сделать ещё короче.bool Visual2015Installed() { bool flag = false; using (var key = Registry.LocalMachine.OpenSubKey(@"SOFTWARE\WOW6432Node\Microsoft\Windows\CurrentVersion\Uninstall")) { flag = key.GetSubKeyNames().Select(program => key.OpenSubKey(program)) .Any(programKey => programKey.GetValue("DisplayName")?.ToString().Contains("Visual C++ 2015") == true); } return flag; }
Привет.
Написал код по запросу, но возможно можно сделать ещё короче.
bool Visual2015Installed()
{
bool flag = false;
using (var key = Registry.LocalMachine.OpenSubKey(@"SOFTWARE\WOW6432Node\Microsoft\Windows\CurrentVersion\Uninstall"))
{
flag = key.GetSubKeyNames().Select(program => key.OpenSubKey(program))
.Any(programKey => programKey.GetValue("DisplayName")?.ToString().Contains("Visual C++ 2015") == true);
}
return flag;
}
Цитата: Mikhail от 11.07.2023, 14:46Привет.
Сергей, тоже думал про этот способ, но такого значения нет в реестре, у меня по крайне мере), а он есть вHKEY_CLASSES_ROOT\Installer\Dependencies.
Привет.
Сергей, тоже думал про этот способ, но такого значения нет в реестре, у меня по крайне мере), а он есть в СкопированоHKEY_CLASSES_ROOT\Installer\Dependencies.
Цитата: Сергей от 11.07.2023, 14:53Mikhail, у себя нашёл поэтому думал будет. Но в твоей ветке меньше значений, думаю будет даже лучше.
Код:bool Visual2015Installed() { bool flag = false; using (var key = Registry.ClassesRoot.OpenSubKey(@"Installer\Dependencies")) { flag = key.GetSubKeyNames().Select(program => key.OpenSubKey(program)) .Any(programKey => programKey.GetValue("DisplayName")?.ToString().Contains("Visual C++ 2015") == true); } return flag; }
Mikhail, у себя нашёл поэтому думал будет. Но в твоей ветке меньше значений, думаю будет даже лучше.
Код:
bool Visual2015Installed()
{
bool flag = false;
using (var key = Registry.ClassesRoot.OpenSubKey(@"Installer\Dependencies"))
{
flag = key.GetSubKeyNames().Select(program => key.OpenSubKey(program))
.Any(programKey => programKey.GetValue("DisplayName")?.ToString().Contains("Visual C++ 2015") == true);
}
return flag;
}
Цитата: Сергей от 11.07.2023, 15:02Редактировать соообщение не могу. Вот более короткий вариант:
bool Visual2015Installed() { using (var key = Registry.ClassesRoot.OpenSubKey(@"Installer\Dependencies")) return key.GetSubKeyNames().Select(program => key.OpenSubKey(program)) .Any(programKey => programKey.GetValue("DisplayName")?.ToString().Contains("Visual C++ 2015") == true); }
Редактировать соообщение не могу. Вот более короткий вариант:
bool Visual2015Installed()
{
using (var key = Registry.ClassesRoot.OpenSubKey(@"Installer\Dependencies"))
return key.GetSubKeyNames().Select(program => key.OpenSubKey(program))
.Any(programKey => programKey.GetValue("DisplayName")?.ToString().Contains("Visual C++ 2015") == true);
}
Цитата: Михаил от 11.07.2023, 15:03Спасибо большое, Сергей и Михаил, всё работает. 🔥
Спасибо большое, Сергей и Михаил, всё работает. 🔥