2015-11-29 3 views
1

Я разрабатываю приложение, которое является универсальным приложением Windows 8.1. Я хочу получить версию os. до Windows 10 Mobile я мог предположить, что эта версия - 8.1, но в настоящее время это предположение неверно. есть ли способ получить версию os в универсальном приложении Windows 8.1?Получить версию ОС в windows universal 8.1

+0

@cFrozenDeath я вижу. но есть ли способ узнать, что это устройство - 8,1 или 10? –

+0

Конечно, у них разные версии .NET. Если вы создадите приложение для 8.1, оно может работать в 8.1 и 10; но если вы построите его на 10, он не будет работать в 8.1. Учтите, что вы не можете знать, если это 8.1 или 10, если вы построите для 8.1 –

+0

@cFrozenDeath это очень странно для меня, почему Microsoft не раскрывает такие Api разработчикам. то как AdDuplex знает версию ОС (я думаю, что у них есть sdk для Windows universal)? –

ответ

3

Windows Phone 8.1 Приложения Silverlight могут использовать API-интерфейсы .NET. Нет никакого поддерживаемого механизма для получения номера версии в приложениях Universal 8.1, но вы можете попытаться использовать отражение, чтобы получить класс Windows 10 AnalyticsInfo, который, по крайней мере, укажет вам номер версии, если вы работаете в Windows 10.

Примечание: Проверка версии ОС почти всегда неправильной вещи, если вы просто не показываете ее пользователю (например, в поле «О программе») или отправляете ее на ваш серверный сервер аналитики для число хруст. Он не должен использоваться для принятия каких-либо решений во время выполнения, потому что в целом это плохой прокси-сервер для , что бы вы ни пытались сделать на самом деле.

Вот пример:

var analyticsInfoType = Type.GetType(
    "Windows.System.Profile.AnalyticsInfo, Windows, ContentType=WindowsRuntime"); 
var versionInfoType = Type.GetType(
    "Windows.System.Profile.AnalyticsVersionInfo, Windows, ContentType=WindowsRuntime"); 
if (analyticsInfoType == null || versionInfoType == null) 
{ 
    Debug.WriteLine("Apparently you are not on Windows 10"); 
    return; 
} 

var versionInfoProperty = analyticsInfoType.GetRuntimeProperty("VersionInfo"); 
object versionInfo = versionInfoProperty.GetValue(null); 
var versionProperty = versionInfoType.GetRuntimeProperty("DeviceFamilyVersion"); 
object familyVersion = versionProperty.GetValue(versionInfo); 

long versionBytes; 
if (!long.TryParse(familyVersion.ToString(), out versionBytes)) 
{ 
    Debug.WriteLine("Can't parse version number"); 
    return; 
} 

Version uapVersion = new Version((ushort)(versionBytes >> 48), 
    (ushort)(versionBytes >> 32), 
    (ushort)(versionBytes >> 16), 
    (ushort)(versionBytes)); 

Debug.WriteLine("UAP Version is " + uapVersion); 
Смежные вопросы