Подтвердить что ты не робот

Получить версию ОС в WinRT Metro App С#

Я программирую приложение Metro Style с С# и бета-версией Visual Studio 11. Теперь я хочу получить OS-версию ОС. Как я могу получить это?

Я узнал, как это сделать в "нормальных" приложениях. Там вы берете класс среды с атрибутом OSVersion, но в .NET Core нет этого атрибута

4b9b3361

Ответ 1

Для новых приложений вы должны проверить определенные функции, а не версию ОС.

Насколько я могу судить, нет причин проверять версию ОС, поскольку приложения для метро доступны только для победы 8.

Изменить: Хранить приложения доступны в нескольких версиях Windows, но по-прежнему рекомендуется тестировать функции вместо версий ОС. Минимальная версия ОС устанавливается как цель сборки для проекта при его создании.

Изменить # 2: Если вы заинтересованы в отслеживании версий ОС на своей базе установки приложений, вы можете интегрировать Application Insights в свой проект, начиная с приложений, ориентированных на Windows 8.1. Вот как начать с него:

http://azure.microsoft.com/en-us/documentation/articles/app-insights-windows-get-started/

Ответ 2

Вы можете получить номер версии ОС с некоторым риском, что может быть неправильным использование API-интерфейсов устройств для получения номеров версий драйверов для низкоуровневых системных компонентов.

Принятый ответ правилен тем, что вы не должны связывать функциональность с номером версии, но есть веские причины использовать его, например, аналитику - полезно знать, когда многие ваши пользователи уже находятся на новой версии и что вы должны рассмотреть обновление приложения, чтобы воспользоваться им.

https://github.com/AttackPattern/CSharpAnalytics/blob/master/Source/CSharpAnalytics/SystemInfo/WindowsStoreSystemInfo.cs содержит дополнительную информацию и пример кода (раскрытие, я написал этот код)

Примечание. Код обновлен и теперь обрабатывает пользовательские/множественные HAL и т.д.

Ответ 3

На самом деле существует простой способ обхода строки версии Windows в форме User Agent (Windows NT 6.x).

Людям интересно, почему мы могли бы это сделать: собрать статистику о наших пользователях в версии Windows и принять осознанные решения о обратной совместимости.

public class OsVersion
{
    public static Task<string> GetAsync()
    {
        var t = new TaskCompletionSource<string>();
        var w = new WebView();
        w.AllowedScriptNotifyUris = WebView.AnyScriptNotifyUri;
        w.NavigateToString("<html />");
        NotifyEventHandler h = null;
        h = (s, e) =>
        {
            try
            {
                var match = Regex.Match(e.Value, @"Windows\s+NT\s+\d+(\.\d+)?");
                if (match.Success)
                    t.SetResult(match.Value);
                else
                    t.SetResult("Unknowm");
            }
            catch (Exception ex) { t.SetException(ex); }
            finally { /* release */ w.ScriptNotify -= h; }
        };
        w.ScriptNotify += h;
        w.InvokeScript("execScript", new[] { "window.external.notify(navigator.appVersion); " });
        return t.Task;
    }

Ответ 4

На основе ответов других плакатов - нет API для тестирования версии ОС, но будут появляться API-запросы для запроса определенного типа. Это означает, что вы не сможете сказать версию будущих выпусков Windows с вашим текущим кодом, но если вы продолжаете обновлять свой код, вы можете определить версию ОС на основе того, доступен ли конкретный тип. На данный момент вы предполагаете использовать текущую версию Windows 8.

Кроме того, я не пробовал, но возможно, что вы могли бы получить его, выполнив взаимодействие с JavaScript и разобрав "navigator.appVersion".