Насколько я знаю, Windows Media Player 10 является минимальным требованием для работы WPF MediaElement. Что такое достойный способ программно (от .NET) проверить наличие WMP и его версию?
Метод, который я использовал в моем установщике, - проверить это значение реестра:
HKLM
Software\Microsoft\MediaPlayer\PlayerUpgrade
PlayerVersion
Значение PlayerVersion будет установлено в строке типа "10,0,0,0". (Обратите внимание, что для разделения номеров используются запятые, а не периоды.) Вам нужно извлечь первое число (основная версия) и убедиться, что оно равно 10 или выше.
Я не смог найти официальную документацию о том, как обнаружить WMP, но вышеописанный метод работает корректно с текущими версиями Windows и WMP.
Обратите внимание, что если WMP9 (версия, поставляемая с Windows XP) установлена, ваше приложение не будет сбой при попытке использовать MediaElement, но элемент управления ничего не отобразит, а предупреждающие сообщения будут напечатаны в отладчике.
Если ваше приложение будет использоваться только с Vista или выше, вам не нужно беспокоиться об этом, потому что Vista поставляется с WMP10.
Здесь вы можете проверить все продукты, установленные в системе:
SelectQuery allProductsQuery = new SelectQuery("Win32_Product");
ManagementObjectSearcher allProducts =
new ManagementObjectSearcher(allProductsQuery);
foreach(ManagementObject product in allProducts.Get())
{
Console.WriteLine("Product {0} is at version {1}",
product.Properties["Name"].Value,
product.Properties["Version"].Value);
}
Вам нужно добавить "using System.Management" и ссылку на "System.Management.dll".
Чтобы получить информацию о конкретном продукте, вы можете уточнить запрос или выполнить поиск продукта во всех них.
Я нашел это решение:
FileVersionInfo inf = FileVersionInfo.GetVersionInfo(Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.ProgramFiles), "Windows Media Player", "wmplayer.exe"));
if (inf.FileVersion.StartsWith("9"))
{...