c# - 如何在 .NET 5.0 控制台应用程序上检查 C# 中的 Windows 版本

标签 c# .net console

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

example.png "

所以我想检查 windows 版本是否为 10。 我做到了

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

是否有更好的方法来检查 Windows 版本?

最佳答案

你可以使用你需要的东西(除了 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

关于c# - 如何在 .NET 5.0 控制台应用程序上检查 C# 中的 Windows 版本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65781382/

相关文章:

C++ 控制台 TicTacToe : Checking Win Conditions

c - 在 C 中与 TicTacToe 斗争

c# - 我是否遗漏了什么或者这不是声明事件的正确方式?

c# - MathNet.过滤带通参数

c# - 文件名、目录名或卷标语法不正确。 (来自 HRESULT : 0x8007007B) 的异常

c# - 检查 ComboBox 是否包含项目

c# - 如何启动一个停止的线程

.net - Console.WriteLine 会阻塞吗?

c# - 如何创建 ASP.NET 网页/站点项目?

c# - 尝试使用 Python 从工作 C# 代码生成 RSA 签名