最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

使用C#獲取操作系統(tǒng)版本號的四種方法

 更新時間:2025年11月27日 09:19:58   作者:降薪碼農(nóng)  
這篇文章主要介紹了在C#中檢測Windows10和Windows11的方法,包括Environment.OSVersion、Registry、WMI和IsWindows11OrGreater()(WinAPI),每種方法都有各自的優(yōu)缺點,需要的朋友可以參考下

在 C# 中,可以通過 Environment.OSVersionWMI (Windows Management Instrumentation) 獲取 Windows 10 或 Windows 11 的版本信息。但由于 Windows 11 修改了版本號格式(仍是 10.0,單獨使用 OSVersion 可能無法區(qū)分 Win10 和 Win11,需要額外的方法來判斷。

4 種方法檢測 Windows 10/11

方法優(yōu)點缺點
Environment.OSVersion簡單快速Win10/Win11 都返回 10.0
Registry直接讀取內(nèi)部版本號(22000+)需要訪問注冊表
WMI (Win32_OS)官方推薦方式查詢較慢
IsWindows11OrGreater() (WinAPI)微軟官方方法(推薦)僅支持 .NET 5+

1、Environment.OSVersion(基礎(chǔ)判斷,無法區(qū)分 Win10/Win11)

var os = Environment.OSVersion;
Console.WriteLine($"平臺: {os.Platform}");         // Win32NT
Console.WriteLine($"主版本: {os.Version.Major}");  // 10(Win10/Win11 均為 10)
Console.WriteLine($"次版本: {os.Version.Minor}");  // 0(Win10/Win11 均為 0)
Console.WriteLine($"Build: {os.Version.Build}");    // 19044(Win10) / 22000(Win11)

? 局限性

  • Windows 11 仍返回 10.0(兼容性問題)
  • 只能靠 Build 版本區(qū)分:
  • Windows 10: < 22000
  • Windows 11: ≥ 22000(首個正式版是 22000

2、讀取注冊表(Get Build Number)

Win11 的內(nèi)部版本號 ≥ 22000

using Microsoft.Win32;

int GetWinBuildNumber()
{
    using (RegistryKey key = Registry.LocalMachine.OpenSubKey(@"SOFTWARE\Microsoft\Windows NT\CurrentVersion"))
    {
        return int.Parse(key.GetValue("CurrentBuildNumber").ToString());
    }
}

var build = GetWinBuildNumber();
if (build >= 22000)
    Console.WriteLine("Windows 11");
else
    Console.WriteLine("Windows 10");

3、WMI(通過Win32_OperatingSystem查詢)

using System.Management;

string GetOSName()
{
    var searcher = new ManagementObjectSearcher("SELECT Caption, BuildNumber FROM Win32_OperatingSystem");
    foreach (ManagementObject os in searcher.Get())
    {
        string caption = os["Caption"].ToString();
        int build = int.Parse(os["BuildNumber"].ToString());
        
        if (build >= 22000)
            return "Windows 11";
        else
            return "Windows 10";
    }
    return "Unknown";
}

Console.WriteLine(GetOSName());

注意:

  1. 需要 System.Management NuGet 包:
Install-Package System.Management
  1. WMI 查詢較慢,但可以獲取更多 OS 信息(如系統(tǒng)名稱、位數(shù))。

4、使用 WinAPIIsWindows11OrGreater()(推薦 .NET 5+)

如果你使用的是 .NET 5 / 6 / 7,可以直接調(diào)用 Windows API:

using System.Runtime.InteropServices;

public static class WinAPI
{
 [DllImport("kernel32.dll")]
 private static extern ulong VerifyVersionInfoW(
 ref OSVERSIONINFOEX lpVersionInfo,
 uint dwTypeMask,
 ulong dwlConditionMask
 );

 [DllImport("kernel32.dll")]
 private static extern ulong VerSetConditionMask(
 ulong dwlConditionMask,
 uint dwTypeBit,
 uint dwConditionMask
 );

 [StructLayout(LayoutKind.Sequential)]
 private struct OSVERSIONINFOEX
 {
 public uint dwOSVersionInfoSize;
 public uint dwMajorVersion;
 public uint dwMinorVersion;
 public uint dwBuildNumber;
 public uint dwPlatformId;
 [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 128)]
 public string szCSDVersion;
 public ushort wServicePackMajor;
 public ushort wServicePackMinor;
 public ushort wSuiteMask;
 public byte wProductType;
 public byte wReserved;
 }

 public static bool IsWindows11OrGreater()
 {
 const uint VER_MAJORVERSION = 0x0000002;
 const uint VER_MINORVERSION = 0x0000001;
 const uint VER_BUILDNUMBER = 0x0000004;
 const uint VER_GREATER_EQUAL = 0x3;

 ulong conditionMask = 0;
 conditionMask = VerSetConditionMask(conditionMask, VER_MAJORVERSION, VER_GREATER_EQUAL);
 conditionMask = VerSetConditionMask(conditionMask, VER_MINORverbsion, VER_GREATER_EQUAL);
 conditionMask = VerSetConditionMask(conditionMask, VER_BUILDNUMBER, VER_GREATER_EQUAL);

 OSVERSIONINFOEX versionInfo = new OSVERSIONINFOEX();
 versionInfo.dwOSVersionInfoSize = (uint)Marshal.SizeOf(versionInfo);
 versionInfo.dwMajorVersion = 10;
 versionInfo.dwMinorVersion = 0;
 versionInfo.dwBuildNumber = 22000; // Windows 11 ≥ 22000

 return VerifyVersionInfoW(ref versionInfo, VER_MAJORVERSION | VER_MINORVERSION | VER_BUILDNUMBER, conditionMask) != 0;
 }
}

// 調(diào)用
bool isWin11 = WinAPI.IsWindows11OrGreater();
Console.WriteLine(isWin11 ? "Windows 11" : "Windows 10");

? 優(yōu)點

  • 微軟官方推薦方法
  • 精確判斷 Win11
    ? 適用 .NET 5 / 6 / 7

最終推薦方案

場景推薦方法
簡單判斷(僅需 Build)Registry / OSVersion.Build
精確判斷(兼容 Win11)IsWindows11OrGreater()(WinAPI)
多 OS 信息(名稱、版本)WMI (Win32_OS)

最優(yōu)解

如果你的應(yīng)用 僅針對 Windows 10/11,推薦直接用注冊表或 Build 判斷

int build = GetWinBuildNumber(); // 方法2
Console.WriteLine(build >= 22000 ? "Windows 11" : "Windows 10");

更簡單,無需復(fù)雜 API 調(diào)用!

額外(檢測 Win10/11 版本號映射)

Windows 版本Build 號
Windows 10 180917763
Windows 10 190918363
Windows 10 200419041
Windows 10 21H219044
Windows 11 21H222000
Windows 11 22H222621

? 所有 Win11 Build ≥ 22000!

以上就是使用C#獲取操作系統(tǒng)版本號的四種方法的詳細(xì)內(nèi)容,更多關(guān)于C#獲取系統(tǒng)版本號的資料請關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • 深入理解C#表達(dá)式樹的使用

    深入理解C#表達(dá)式樹的使用

    表達(dá)式樹是C#編程語言中一個強大的特性,本文將深入探討表達(dá)式樹的基本概念、創(chuàng)建方法、節(jié)點類型、遍歷技巧以及在C#中的應(yīng)用示例,感興趣的可以了解一下
    2024-03-03
  • 基于C#制作一個休息提醒鬧鐘的詳細(xì)步驟

    基于C#制作一個休息提醒鬧鐘的詳細(xì)步驟

    小鬧鐘大家都應(yīng)該很熟悉,它包括時間、事件,當(dāng)達(dá)到某某時間時,事件發(fā)生了,并且還有一個提示信息,下面這篇文章主要給大家介紹了關(guān)于如何基于C#制作一個休息提醒鬧鐘的詳細(xì)步驟,需要的朋友可以參考下
    2023-02-02
  • C#的TimeSpan案例詳解

    C#的TimeSpan案例詳解

    這篇文章主要介紹了C#的TimeSpan案例詳解,本篇文章通過簡要的案例,講解了該項技術(shù)的了解與使用,以下就是詳細(xì)內(nèi)容,需要的朋友可以參考下
    2021-08-08
  • 如何用C#實現(xiàn)壓縮文件

    如何用C#實現(xiàn)壓縮文件

    話說當(dāng)今壓縮市場三足鼎立,能叫上名號的有zip、rar、7z。其中zip是壓縮界的鼻祖,在各大平臺上的流行度最廣,rar是商業(yè)軟件,壓縮率和效率都是很高的。7z是開源的,屬于后起之秀。這篇文章介紹了如何使用ICSharpCode組件,在windows平臺下zip的壓縮與解壓的方法
    2021-06-06
  • Unity打包代碼到DLL的實現(xiàn)

    Unity打包代碼到DLL的實現(xiàn)

    本文主要介紹了Unity打包代碼到DLL的實現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-03-03
  • C#泛型集合Dictionary<K,V>的使用方法

    C#泛型集合Dictionary<K,V>的使用方法

    這篇文章主要介紹了C#泛型集合Dictionary<K,V>的使用方法,本文講解了Dictionary的多種操作方法,需要的朋友可以參考下
    2014-10-10
  • C#代碼實現(xiàn)重新排列Excel中的列

    C#代碼實現(xiàn)重新排列Excel中的列

    適當(dāng)調(diào)整?Excel?中列的順序可以提高數(shù)據(jù)的可讀性,本文將介紹如何在?C#?和?VB.NET?中以編程方式重新排列?Excel?中的列,感興趣的小伙伴可以了解下
    2026-05-05
  • C#判斷一個字符串是否包含另一個字符串的方法

    C#判斷一個字符串是否包含另一個字符串的方法

    這篇文章主要介紹了C#判斷一個字符串是否包含另一個字符串的方法,涉及C#中IndexOf方法的使用技巧,非常簡單實用,需要的朋友可以參考下
    2015-04-04
  • Unity實現(xiàn)物體運動時畫出軌跡

    Unity實現(xiàn)物體運動時畫出軌跡

    這篇文章主要為大家詳細(xì)介紹了Unity實現(xiàn)物體運動時畫出軌跡,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-09-09
  • C#操作SQLite數(shù)據(jù)庫方法小結(jié)

    C#操作SQLite數(shù)據(jù)庫方法小結(jié)

    這篇文章介紹了C#操作SQLite數(shù)據(jù)庫的方法,文中通過示例代碼介紹的非常詳細(xì)。對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2022-06-06

最新評論

合肥市| 如皋市| 旬邑县| 阿尔山市| 金阳县| 临湘市| 凌海市| 松原市| 固阳县| 宽甸| 新蔡县| 宜黄县| 隆子县| 滦南县| 兴文县| 庄河市| 克东县| 和龙市| 白朗县| 锦屏县| 吉木萨尔县| 武平县| 海安县| 溧阳市| 三门县| 德安县| 遵化市| 万盛区| 遂溪县| 阿克苏市| 嘉兴市| 五常市| 称多县| 格尔木市| 曲水县| 惠水县| 平陆县| 大渡口区| 南江县| 尚志市| 湛江市|