Windows 10获得DeviceFamilyVersion

tao*_*tao 6 win-universal-app windows-10

我正在使用Windows 10 10240 Univasal windows应用程序,当我使用Windows.System.Profile.AnalyticsInfo.VersionInfo.DeviceFamilyVersion获取deivce版本时,它返回一个字符串"2814750438211605"而不是版本格式(major.minor.revision.build) ).谁能告诉我字符串"2814750438211605"是什么意思?

Mar*_*han 16

Windows 10 OS版本值位于此字符串属性中:
Windows.System.Profile.AnalyticsInfo.VersionInfo.DeviceFamilyVersion

它返回字符串值,如"2814750438211613".
要将此长数字转换为可读格式,请使用以下命令:

string sv = AnalyticsInfo.VersionInfo.DeviceFamilyVersion;
ulong v = ulong.Parse(sv);
ulong v1 = (v & 0xFFFF000000000000L) >> 48;
ulong v2 = (v & 0x0000FFFF00000000L) >> 32;
ulong v3 = (v & 0x00000000FFFF0000L) >> 16;
ulong v4 = v & 0x000000000000FFFFL;
string version = $"{v1}.{v2}.{v3}.{v4}"; // == 10.0.10240.16413
Run Code Online (Sandbox Code Playgroud)


Chu*_*urn 3

您的应用程序应将其视为不透明数据并“按原样”记录。它是一个 64 位十进制值字符串。

请记住,此 API 的目的是提供一个日志字符串,您可以从中重建操作系统版本号以进行支持/分析。在服务器端分析中,您可以根据需要对其进行转换,或者只是将其用作唯一的版本标识符...如果您实际上尝试在运行时解析它,那么您就错误地使用了它,并且很可能会重新产生与首先导致GetVersionEx并被弃用。VerifyVersionInfo

不要在应用程序运行时解析该字符串。请“按原样”存储 请记住,对于 Windows 10,如果您询问“您拥有什么版本的 Windows?”,客户实际上并不知道您的意思。答案是“10”,并且在未来很长一段时间内可能仍然是“10”。