我正在使用C#和Visual Studio 11 Beta编写Metro风格应用程序。 现在我想获得操作系统的操作系统版本。我怎么能得到这个?
我发现了如何在“普通”应用程序中执行此操作。 在那里你使用OSVersion属性的Environment-Class,但在.NET Core中没有这个属性
答案 0 :(得分:11)
通过使用设备API获取低级系统组件的驱动程序版本号,您可以获得操作系统版本号,但存在一些可能不正确的风险。
接受的答案是正确的,因为您不应该将功能与版本号绑定,但是有充分的理由使用它(例如分析) - 了解很多用户已经使用新版本的时候很有用您应该考虑使用应用程序更新来利用它。
https://github.com/AttackPattern/CSharpAnalytics/blob/master/Source/CSharpAnalytics/SystemInfo/WindowsStoreSystemInfo.cs有更多信息和示例代码(披露,我写了那段代码)
注意:代码已更新,现在处理自定义/多个HAL等。
答案 1 :(得分:6)
对于新应用程序,您应该检查特定功能,而不是操作系统版本。
据我所知,没有理由检查操作系统版本,因为地铁应用程序仅适用于win 8。
编辑:商店应用程序现在可在多个Windows版本上使用,但仍建议您测试功能而不是OS版本。在创建项目时,将最低操作系统版本设置为项目的构建目标。
编辑#2:如果您对在应用程序的安装基础中跟踪操作系统版本感兴趣,可以从针对Windows 8.1的应用程序开始,将Application Insights集成到您的项目中。以下是开始使用它的方法:
http://azure.microsoft.com/en-us/documentation/articles/app-insights-windows-get-started/
答案 2 :(得分: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;
}
答案 3 :(得分:0)
根据其他海报的答案 - 没有用于测试操作系统版本的API,但会有API来查询特定类型的版本。这意味着您可能无法使用当前代码告知Windows未来版本的版本,但如果您不断更新代码 - 您可以根据特定类型是否可用来确定操作系统版本。现在您可以假设使用当前版本的Windows 8。
此外,我还没有尝试过,但你可以通过与JavaScript互操作并解析“navigator.appVersion”来获得它。