事实上,有一个简单的解决方法可以在其用户代理形式 (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;
}