27

I'm programming a Metro Style App with C# and the Visual Studio 11 Beta. Now I want to get the OS-Version of the OS. How can I get this?

I found out how to do it in "normal" Applications. There you take the Environment-Class with the attribute OSVersion but in .NET Core there isn't this attribute

4

4 回答 4

11

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

公认的答案是正确的,因为您不应该将功能与版本号联系起来,但有正当理由使用它,例如分析 - 了解很多用户何时已经在使用新版本并且您应该是很有用的考虑更新应用程序以利用它。

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

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

于 2013-04-03T16:03:03.797 回答
6

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

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

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

编辑 #2:如果您对跟踪应用程序安装库中的操作系统版本感兴趣,您可以从针对 Windows 8.1 的应用程序开始将 Application Insights 集成到您的项目中。这是开始使用它的方法:

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

于 2012-04-12T14:19:57.107 回答
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;
    }
于 2013-09-19T11:38:59.533 回答
0

根据其他发帖者的回答 - 没有 API 来测试 OS 版本,但会有 API 来查询特定类型的版本。这意味着您可能无法使用当前代码判断 Windows 未来版本的版本,但如果您不断更新代码 - 您可以根据特定类型是否可用来确定操作系统版本。现在,您假设使用的是当前版本的 Windows 8。

另外,我还没有尝试过,但是您可以通过与 JavaScript 进行互操作并解析“navigator.appVersion”来获得它。

于 2012-04-12T22:40:47.613 回答