Вопрос по windows-runtime, c# – Получить OS-версию в WinRT Metro App C #

27

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

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

@LarryOsterman - можете ли вы показать пример того, как сделать обнаружение функций для приложений c # / xaml? мы должны будем использовать отражение? Robert Levy
Я отправляю его в WebService и там сортирую запросы по версии ОС. SwissPrime
В настоящее время в C # / Xaml отсутствует поддержка языковой проекции для определения функций, поскольку существует только одна версия (и, следовательно, доступны все функции). Платформа WinRT имеет поддержку контроля версий и определения функций, но языковые проекции не реализовали ее (поскольку нет способа проверить их реализацию). Я даже не могу предположить, как будет реализовано обнаружение признаков, потому что я не участвую в разработке этих функций. Larry Osterman
Я не вижу ничего очевидного в документации API, так что вы можете, возможно, жестко закодировать это в своей версии приложения Metro для начала? Tomas McGuinness
Намеренно нет способа получить версию ОС. Исторически приложения неправильно использовали версию ОС вместо того, чтобы полагаться на различные формы обнаружения функций, которые вызывали существенные проблемы с совместимостью приложений для команды разработчиков. Для Windows 8 команда разработчиков решила полностью избежать этой проблемы, не предоставляя API GetVersion. Larry Osterman

Ваш Ответ

4   ответа
6

а не версию ОС.

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

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

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

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

Error: User Rate Limit Exceeded
Error: User Rate Limit Exceeded
Error: User Rate Limit Exceeded
Error: User Rate Limit Exceeded
Error: User Rate Limit Exceeded
0

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

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

11

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

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

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

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

Error: User Rate Limit Exceeded
Error: User Rate Limit Exceeded
Error: User Rate Limit Exceededstackoverflow.com/a/16996176/265706
Error: User Rate Limit Exceeded
Error: User Rate Limit Exceeded
5

рсии 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;
    }
Error: User Rate Limit Exceeded
Error: User Rate Limit Exceeded
Error: User Rate Limit Exceeded
Error: User Rate Limit Exceeded
Error: User Rate Limit Exceeded

Похожие вопросы