【问题标题】:How to check windows version in C# on .NET 5.0 console app如何在 .NET 5.0 控制台应用程序上检查 C# 中的 Windows 版本
【发布时间】:2021-04-23 03:44:16
【问题描述】:

就像我在开发“控制台游戏引擎”一样 但它仅适用于 Windows 10,因为“自定义颜色”不能正确显示在其他版本上,例如 win8,而是它们只是一堆 unicode 代码? "

"

所以我想检查 Windows 版本是否为 10。 我这样做了

var workingSysVer = Environment.OSVersion.Version.ToString().Substring(0, 2);
            if (workingSysVer != "10")
            {
                Console.Title = "OS Version Warning";
                // other code
            }

有没有更好的方法来检查 windows 的版本?

【问题讨论】:

  • 仅限 Windows 或多平台?
  • 我的意思是,我做了这样的事情: if(Microsoft.Win32.Registry.GetValue(@"HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion", "productName", "").ToString ().Substring(0, 10) != "Windows 10") { // 其他东西 }
  • 哦,哦,可以的
  • .StartWith("Windows 10")... 这就是为什么微软必须跳过 Windows 100 ;)

标签: c# .net console


【解决方案1】:

你可以从中使用你需要的东西(除了OSVersion你还可以使用osNameosRelease):

using System;
using System.Linq;
using System.Reflection;
using System.Runtime.Versioning;
using Microsoft.Win32;

string NL = Environment.NewLine;
string HKLMWinNTCurrent = @"HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion";

string osName = get(() => Registry.GetValue(HKLMWinNTCurrent, "productName", "").ToString());

string osRelease = get(() => Registry.GetValue(HKLMWinNTCurrent, "ReleaseId", "").ToString());
if ( !osRelease.IsNullOrEmpty() ) osRelease = $" ({ osRelease})";

string osVersion = Environment.OSVersion.Version.ToString();

string osType = Environment.Is64BitOperatingSystem ? "64-bits" : "32-bits";

string clr = Environment.Version.ToString();

string dotnet = get(() =>
{
  var attributes = Assembly.GetExecutingAssembly().CustomAttributes;
  var result = attributes.FirstOrDefault(a => a.AttributeType == typeof(TargetFrameworkAttribute));
  return result == null
          ? ".NET Framework (unknown)"
          : result.NamedArguments[0].TypedValue.Value.ToString();
});

string Platform = $"{osName} {osType} {osVersion}{osRelease}{NL}{dotnet}{NL}CLR {clr}";

string get(Func<string> func)
{
  try { return func(); }
  catch { return "(undefined)"; }
}

例子

Windows 10 Pro 64-bits 6.2.9200.0 (2009)
.NET Framework 4.7.2
CLR 4.0.30319.42000

我从未注意到 6.2.9200 是 incorrect...!?

@nap 的解决方案How to get Windows Version - as in "Windows 10, version 1607"?

@DanielDiPaolo 的解释Detect Windows version in .net

【讨论】:

  • 谢谢!那样检查肯定更好
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-03-11
  • 2012-03-07
  • 2017-05-18
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多