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