Как получить Windows 10 версию (например, 1809, 1903, 1909, ...) в приложении UWP (C# или Win JS)? - PullRequest
1 голос
/ 09 апреля 2020

Я прочитал много сообщений от stackoverflow, но не было решения для моей проблемы. Я хочу получить номер версии работающей установки Windows 10 (например, 1809 или 1909) в C# или WinJS. Я разрабатываю приложение UWP с Cordova (Javascript), и у меня также есть плагин Cordova (winmd) в C#, который я могу использовать, но нет никакого API, чтобы получить этот номер версии 4 di git.

У меня есть код 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 - это только версия с исправлением ошибок без собственного 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 Ответ

1 голос
/ 10 апреля 2020

Вы можете использовать AnalyticsInfo.VersionInfo.DeviceFamilyVersion, чтобы получить номер версии.

Свойство представляет собой строку, содержащую несколько цифр. Разобрать строку в 32-разрядное число, а затем каждый байт этого 32-разрядного числа образует часть стандартной A.B.C.D версии.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...