在WinRT Metro App C#中获取操作系统版本

Swi*_*ime 27 c# operating-system microsoft-metro windows-8 windows-runtime

我正在使用C#和Visual Studio 11 Beta编写Metro风格应用程序.现在我想获得操作系统的操作系统版本.我怎么能得到这个?

我发现了如何在"普通"应用程序中执行此操作.在那里你使用OSVersion属性的Environment-Class,但在.NET Core中没有这个属性

Dam*_*enG 11

通过使用设备API获取低级系统组件的驱动程序版本号,可以获得操作系统版本号,但存在一些可能不正确的风险.

接受的答案是正确的,因为您不应该将功能与版本号绑定,但是有充分的理由使用它,例如分析 - 知道很多用户已经使用新版本并且您应该是考虑应用程序更新以利用它.

https://github.com/AttackPattern/CSharpAnalytics/blob/master/Source/CSharpAnalytics/SystemInfo/WindowsStoreSystemInfo.cs有更多信息和示例代码(披露,我写了那段代码)

注意:代码已更新,现在处理自定义/多个HAL等.


lin*_*rro 6

对于新应用程序,您应检查特定功能,而不是操作系统版本.

据我所知,没有理由检查操作系统版本,因为metro应用程序仅适用于win 8.

编辑:存储应用程序现在可在多个Windows版本上使用,但仍建议测试功能而不是OS版本.在创建项目时,将最低操作系统版本设置为项目的构建目标.

编辑#2:如果您对在应用程序的安装基础中跟踪OS版本感兴趣,可以从针对Windows 8.1的应用程序开始将Application Insights集成到您的项目中.以下是开始使用它的方法:

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

  • 你怎么能预料到那样"没有理由"检查操作系统版本?如果,出于统计目的,它实际上与获得应用程序运行的确切操作系统版本相关(如果它可能不会永远固定在6.2.9200.0,你不觉得吗?)?对不起,这不是一个真正的答案,它只是一种避免它的光顾方式. (19认同)
  • 为了支持目的,了解某人正在运行的操作系统版本非常有用.如果您提供了一种直接从应用程序向支持部门发送电子邮件的方法,那么在该电子邮件中嵌入操作系统版本详细信息非常有用. (4认同)
  • 我想这是面向未来的.Metro风格的应用程序也很可能在Windows 9上运行. (3认同)
  • @RobertLevy,正如OP在评论中所说,将操作系统版本发送到WebService. (2认同)

Cyp*_*ier 5

事实上,有一个简单的解决方法是在其用户代理表单(Windows NT 6.x)中获取Windows版本字符串.

让人们想知道我们为什么要这样做:收集有关我们用户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;
    }
Run Code Online (Sandbox Code Playgroud)