如何在 UWP 应用(C# 或 WinJS)中获取 Windows 10 版本(例如 1809、1903、1909、...)?
Posted
技术标签:
【中文标题】如何在 UWP 应用(C# 或 WinJS)中获取 Windows 10 版本(例如 1809、1903、1909、...)?【英文标题】:How to get Windows 10 version (e.g. 1809, 1903, 1909, ...) in a UWP app (C# or WinJS)? 【发布时间】:2020-07-22 12:05:03 【问题描述】:我阅读了很多 *** 帖子,但没有解决我的问题。 我想在 C# 或 WinJS 中获取正在运行的 Windows 10 安装的版本号(例如 1809 或 1909) 我使用 Cordova (javascript) 开发了一个 UWP 应用程序,并且我还有一个 C# 中的 Cordova 插件 (winmd),我可以使用它,但是没有 api 来获取这个 4 位数的版本号。
我有一个 WinJS/Javascript 代码,它在 1903 版之前运行良好:
var ApiInformation = Windows.Foundation.Metadata.ApiInformation;
if (ApiInformation.isApiContractPresent("Windows.Foundation.UniversalApiContract", 9))
return 9999; // TODO: fix this build number, when it is released
else if (ApiInformation.isApiContractPresent("Windows.Foundation.UniversalApiContract", 8))
return 1903;
else if (ApiInformation.isApiContractPresent("Windows.Foundation.UniversalApiContract", 7))
return 1809;
else if (ApiInformation.isApiContractPresent("Windows.Foundation.UniversalApiContract", 6))
return 1803;
else if (ApiInformation.isApiContractPresent("Windows.Foundation.UniversalApiContract", 5))
return 1709
else if (ApiInformation.isApiContractPresent("Windows.Foundation.UniversalApiContract", 4))
return 1703;
else if (ApiInformation.isApiContractPresent("Windows.Foundation.UniversalApiContract", 3))
return 1607;
else if (ApiInformation.isApiContractPresent("Windows.Foundation.UniversalApiContract", 2))
return 1511;
else if (ApiInformation.isApiContractPresent("Windows.Foundation.UniversalApiContract", 1))
return 1507;
else
return 0;
但由于 Windows 10 1909 只是一个 bugfix 版本,没有自己的 SDK,因此也没有新的 UniversalApiContract 版本。因此,在 Windows 1909 安装中,检查 UniversalApiContract“9”会返回“false”,因此它会返回“1903”而不是“1909”。
是否有一些开发人员在 1909 版中发现了一些新的或 1909 版独有的东西,所以我们可以检查一下并说这是 1909 版?
重要提示:我正在开发一个 UWP 应用,Windows 有一个用于 UWP 应用的沙盒概念,因此存在一些限制,例如UWP 应用无法访问注册表或整个文件系统。
[更新] 谢谢彼得!现在可以了。
我用这个代码在 UWP Cordova WinJS/Javascript 中使用它:
var v = Windows.System.Profile.AnalyticsInfo.versionInfo.deviceFamilyVersion;
var major = (v & 0xFFFF000000000000) >> 48;
var minor = (v & 0x0000FFFF00000000) >> 32;
var build = (v & 0x00000000FFFF0000) >> 16;
var release = v & 0x000000000000FFFF;
if (build == 18363)
return 1909;
if (build == 18362)
return 1903;
我必须使用 Windows.System.Profile.AnalyticsInfo.versionInfo.deviceFamilyVersion,因为 Windows.System.Profile.AnalyticsVersionInfo.deviceFamilyVersion 是“未定义”的提示“没有权限”?但上面的代码有效。
【问题讨论】:
【参考方案1】:您可以使用AnalyticsInfo.VersionInfo.DeviceFamilyVersion
获取版本号。
该属性是一个包含一些数字的字符串。将字符串解析为 32 位数字,然后该 32 位数字的每个字节构成标准 A.B.C.D
版本的一部分。
【讨论】:
谢谢彼得!有用。我已经更新了我原来的帖子。以上是关于如何在 UWP 应用(C# 或 WinJS)中获取 Windows 10 版本(例如 1809、1903、1909、...)?的主要内容,如果未能解决你的问题,请参考以下文章
WinJS UWP javascript - 如何通过文件输入读取文件
如何在 C# 中使用 HoloLens 2 在 2D UWP 应用程序中获取 Eye-gaze 位置
C# Uwp app webbrowser 控件无法获取设备位置