it-roy-ru.com

Получить OS-версию в WinRT Metro App C #

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

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

27
SwissPrime

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

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

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

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

http://Azure.Microsoft.com/en-us/documentation/articles/app-insights-windows-get-started/

6
linkerro

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

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

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

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

11
DamienG

На самом деле существует простой обходной путь для получения строки версии Windows в форме пользовательского агента (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;
    }
5
Cyprien Autexier

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

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

0
Filip Skakun