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