在windows universal 8.1中获取操作系统版本

时间:2015-11-29 13:51:43

标签: c# .net windows-phone-8.1 windows-8.1 win-universal-app

我正在开发一款Windows通用8.1应用程序。我想获得操作系统版本。在Windows 10 Mobile之前,我可以假设该版本是8.1,但目前这种假设并非如此。有没有办法在Windows 8.1 Universal应用程序中获取操作系统版本?

1 个答案:

答案 0 :(得分:3)

Windows Phone 8.1 Silverlight应用程序可以使用.NET版API。在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);