前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >WPF桌面端开发-获取系统版本,位数等信息

WPF桌面端开发-获取系统版本,位数等信息

作者头像
码客说
发布于 2023-07-11 06:09:19
发布于 2023-07-11 06:09:19
72500
代码可运行
举报
文章被收录于专栏:码客码客
运行总次数:0
代码可运行

获取系统版本

无论哪种方式获取系统版本,Win11获取到的都是Win10,但是版本号的方式可以通过构建号来判断Win11。

Management也能获取出Win11。

通过Version获取

注意:

通过版本号不能判断Win11,但是这里可以通过构建号来判断是否为Win11。

代码

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
/// <summary>
/// 通过版本号方式获取系统版本
/// </summary>
/// <returns></returns>
public static string GetOsVersion()
{
    OperatingSystem os = Environment.OSVersion;
    Version vs = os.Version;
    string operatingSystem = "";
    switch (os.Platform)
    {
        case PlatformID.Win32Windows:
            switch (vs.Minor)
            {
                case 0:
                    operatingSystem = "95";
                    break;
                case 10:
                    operatingSystem = vs.Revision.ToString() == "2222A" ? "98SE" : "98";
                    break;
                case 90:
                    operatingSystem = "Me";
                    break;
            }
            break;
        case PlatformID.Win32NT:
            switch (vs.Major)
            {
                case 3:
                    operatingSystem = "NT 3.51";
                    break;
                case 4:
                    operatingSystem = "NT 4.0";
                    break;
                case 5:
                    operatingSystem = vs.Minor == 0 ? "2000" : "XP";
                    break;
                case 6:
                    if (vs.Minor == 0)
                        operatingSystem = "Vista";
                    else if (vs.Minor == 1)
                        operatingSystem = "7";
                    else if (vs.Minor == 2)
                        operatingSystem = "8";
                    else
                        operatingSystem = "8.1";
                    break;
                case 10:
                    operatingSystem = "10";
                    if (os.Version.Build >= 22000)
                    {
                        operatingSystem = "11";
                    }
                    break;
            }
            break;
    }
    if (operatingSystem != "")
    {
        operatingSystem = "Windows " + operatingSystem;
        if (os.ServicePack != "")
        {
            operatingSystem += " " + os.ServicePack;
        }
    }
    return operatingSystem;
}

Win10获取的是Win8

此方法在Win10下获取的值可能不是10,这是因为版本不兼容,解决方案是程序应用清单中增加配置:

添加文件

添加后属性中已经默认选择了这个清单文件

把清单中的这些配置解除注释

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<compatibility xmlns="urn:schemas-microsoft-com:compatibility.v1">
    <application>
      <!-- 设计此应用程序与其一起工作且已针对此应用程序进行测试的
           Windows 版本的列表。取消评论适当的元素,
           Windows 将自动选择最兼容的环境。 -->

      <!-- Windows Vista -->
      <supportedOS Id="{e2011457-1546-43c5-a5fe-008deee3d3f0}" />

      <!-- Windows 7 -->
      <supportedOS Id="{35138b9a-5d96-4fbd-8e2d-a2440225f93a}" />

      <!-- Windows 8 -->
      <supportedOS Id="{4a2f28e3-53b9-4441-ba9c-d69d4a4a6e38}" />

      <!-- Windows 8.1 -->
      <supportedOS Id="{1f676c76-80e1-4239-95bb-83d0f6d0da78}" />

      <!-- Windows 10 -->
      <supportedOS Id="{8e0f7a12-bfb3-4fe8-b9a5-48fd50a15a9a}" />

    </application>
</compatibility>

这时候就能正常获取Win10了。

版本号

Version

PlatformID

Major version

Minor version

Windows 95

Win32Windows

4

0

Windows 98

Win32Windows

4

10

Windows Me

Win32Windows

4

90

Windows NT 4.0

Win32NT

4

0

Windows 2000

Win32NT

5

0

Windows XP

Win32NT

5

1

Windows XP 64-Bit Edition

Win32NT

5

1

Windows 2003

Win32NT

5

2

Windows Server 2003

Win32NT

5

2

Windows Server 2003 R2

Win32NT

5

2

Windows 2003

Win32NT

5

2

Windows Vista

Win32NT

6

0

Windows 2008

Win32NT

6

0

Windows Server 2008

Win32NT

6

0

Windows 7

Win32NT

6

1

Windows 2008 R2

Win32NT

6

1

Windows Server 2008 R2

Win32NT

6

1

Windows 8

Win32NT

6

2

Windows Server 2012

Win32NT

6

2

Windows 8.1

Win32NT

6

3

Windows Server 2012 R2

Win32NT

6

3

Windows Server 2016 Technical Preview

Win32NT

10

0

Windows 10

Win32NT

10

0

Windows 11

Win32NT

10

0

通过注册表获取

这种方式Win10及以前都是准确的,但是

这种方式Win11会获取为Win10。

代码

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
/// <summary>
/// 获取Windows系统版本
/// </summary>
/// <returns>Windows系统版本字符串</returns>
public static string GetWindowsVersion()
{
    return (string)Registry.LocalMachine.OpenSubKey(@"SOFTWARE\Microsoft\Windows NT\CurrentVersion")?.GetValue("ProductName");
}

通过InteropServices获取

注意:

这种方式Win11会获取为Win10。

添加引用

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
System.Runtime.InteropServices.Runtimelnformation

判断是否是Windows

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
RuntimeInformation.IsOSPlatform(OSPlatform.Windows)

获取系统版本

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
public static string GetSysVersion()
{
    string osVersion = RuntimeInformation.OSDescription;
    return osVersion;
}

Management方式(推荐)

注意

这种方式能获取到Win11。

添加引用

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
System.Management

代码

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
/// <summary>
/// 通过Management方式获取系统版本
/// </summary>
/// <returns></returns>
public static string GetOsNameInfo()
{
    try
    {
        ManagementClass osClass = new ManagementClass("Win32_OperatingSystem");
        foreach (var o in osClass.GetInstances())
        {
            var obj = (ManagementObject)o;
            PropertyDataCollection pdc = obj.Properties;
            foreach (PropertyData pd in pdc)
            {
                if (pd.Name == "Caption")
                {
                    return pd.Value.ToString()
                    .Replace(
                        "Microsoft ",
                        ""
                    );
                }
            }
        }
    }
    catch (Exception)
    {
        return "";
    }
    return "";
}

系统位数

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
/// <summary>
/// 获取系统位数
/// </summary>
/// <returns></returns>
public static int GetBit()
{
    return Environment.Is64BitOperatingSystem ? 64 : 32;
}

品牌型号

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
/// <summary>
/// 获取电脑品牌
/// </summary>
/// <returns></returns>
public static string GetPcManufacturer()
{
    // 电脑型号 Win32_ComputerSystem  Model
    //
    // 电脑品牌  Win32_ComputerSystem Manufacturer
    try
    {
        ManagementClass osClass = new ManagementClass("Win32_ComputerSystem");
        foreach (var o in osClass.GetInstances())
        {
            var obj = (ManagementObject)o;
            PropertyDataCollection pdc = obj.Properties;
            foreach (PropertyData pd in pdc)
            {
                if (pd.Name == "Manufacturer")
                {
                    return pd.Value.ToString().Replace("Microsoft ", "");
                }
            }
        }
    }
    catch (Exception)
    {
        return "";
    }
    return "";
}

/// <summary>
/// 获取电脑型号
/// </summary>
/// <returns></returns>
public static string GetPcModel()
{
    // 电脑型号 Win32_ComputerSystem  Model
    //
    // 电脑品牌  Win32_ComputerSystem Manufacturer
    try
    {
        ManagementClass osClass = new ManagementClass("Win32_ComputerSystem");
        foreach (var o in osClass.GetInstances())
        {
            var obj = (ManagementObject)o;
            PropertyDataCollection pdc = obj.Properties;
            foreach (PropertyData pd in pdc)
            {
                if (pd.Name == "Model")
                {
                    return pd.Value.ToString().Replace("Microsoft ", "");
                }
            }
        }
    }
    catch (Exception)
    {
        return "";
    }
    return "";
}

其他可获取的值

https://learn.microsoft.com/zh-cn/windows/win32/cimwin32prov/win32-computersystem?redirectedfrom=MSDN

常用的值

类型

Key

系统版本

Win32_OperatingSystem

Caption

电脑型号

Win32_ComputerSystem

Model

电脑品牌

Win32_ComputerSystem

Manufacturer

工作组

Win32_ComputerSystem

Domain

登录用户

Win32_ComputerSystem

UserName

计算机名

Win32_ComputerSystem

Name

最后盘符

Win32_BootConfiguration

LastDrive

主板序列号

Win32_ComputerSystemProduct

IdentifyingNumber

测试结果

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
private void GetSysInfo()
{
    List<string> strList = new List<string>();
    var sysInfo = ZSysUtils.GetSysVersion();
    strList.Add($@"InteropServices方式:{sysInfo}");
    strList.Add(@"============================");
    var windowsVersion = ZSysUtils.GetWindowsVersion();
    strList.Add($@"注册表方式:{windowsVersion}");
    strList.Add(@"============================");
    var osVersion = ZSysUtils.GetOsVersion();
    strList.Add($@"版本号方式:{osVersion}");
    strList.Add(@"============================");
    var osNameInfo = ZSysUtils.GetOsNameInfo();
    strList.Add($@"Management方式:{osNameInfo}");
    strList.Add(@"============================");
    strList.Add($@"系统位数:{ZSysUtils.GetBit()}");
    strList.Add(@"============================");
    var manufacturer = ZSysUtils.GetPcManufacturer();
    strList.Add($@"品牌:{manufacturer}");
    strList.Add(@"============================");
    var model = ZSysUtils.GetPcModel();
    strList.Add($@"型号:{model}");
    VersionTb.Text = string.Join(
        "\n",
        strList
    );
}

结果如下:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
InteropServices方式:Windows 10.0.22621 
============================
注册表方式:Windows 10 Home China
============================
版本号方式:Windows 11
============================
Management方式:Windows 11 家庭中文版
============================
系统位数:64
============================
品牌:LENOVO
============================
型号:21CSA14YCD
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2023-06-30,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
dotnet 通过 WMI 获取系统信息
Win32_OperatingSystem class - Windows applications
林德熙
2022/08/07
3930
桌面应用如何判断win11操作系统
Windows 11 操作系统已经正式发布快有一年了,在 .Net 开发中,我们获取操作系统版本,经常使用 Environment.OSVersion.Version.Major 和 Minor(6.1 = Windows 7, 10.0 = Windows 10),但是当 Win11 出现以后,一切变的有些不一样了。因为 Win11 获取到的操作系统版本[1] Major Minor 与 Win10 一样。
桑榆肖物
2022/11/18
1.8K0
桌面应用如何判断win11操作系统
dotnet 通过 WMI 获取系统信息
Win32_OperatingSystem class - Windows applications
林德熙
2019/03/13
5270
利用platform库获取浏览器和操作系统版本
网站获取用户的浏览器和操作系统版本是一个很常见的需求,但是细说起来这个功能的实现并不简单。一般情况下有两种思路。
乐百川
2022/05/05
1.2K0
C# 获取计算机相关信息
1. 在'解决方案资源管理器' 窗口中->右击项目-> '添加' -> '引用' 弹出引用管理器
用户7053485
2020/03/19
1.1K0
System.Management 概述
System.Management 是一个用于访问和管理 Windows 系统信息的命名空间,基于 Windows Management Instrumentation (WMI) 提供了丰富的管理功能。
郑子铭
2025/03/20
640
System.Management 概述
C#获取机器信息(IPV4.IPV6.MAC.硬盘信息,机器厂商/型号)「建议收藏」
using System; using System.Collections.Specialized; using System.IO; using System.Management; using System.Net; using System.Net.Sockets; using System.Windows; using System.Windows.Input; using System.Windows.Media;
全栈程序员站长
2022/11/10
9870
C#获取机器信息(IPV4.IPV6.MAC.硬盘信息,机器厂商/型号)「建议收藏」
PowerShell 通过 WMI 获取系统信息
本文告诉大家如何通过 WMI 使用 Win32_OperatingSystem 获取设备厂商
林德熙
2019/03/13
1.6K0
在 C# 中获取操作系统相关信息
在开发应用程序时,获取操作系统的信息对程序的功能和兼容性至关重要。我们可以通过操作系统的相关信息来进行环境检测、功能适配和错误报告等功能。本文将介绍如何在 C# 中获取操作系统的详细信息,涵盖操作系统名称、版本、体系结构等内容,并提供详尽的代码示例和解释。
Michel_Rolle
2024/07/22
2.7K0
python开发_platform_获取操作系统详细信息工具
=======================================================
Hongten
2018/09/13
4660
python开发_platform_获取操作系统详细信息工具
ManagementClass类解析和C#如何获取硬件的相关信息
彭泽0902
2018/01/04
3.8K1
ManagementClass类解析和C#如何获取硬件的相关信息
PowerShell 通过 WMI 获取系统信息
本文告诉大家如何通过 WMI 使用 Win32_OperatingSystem 获取设备厂商
林德熙
2022/08/04
6570
CefSharp中c#和JavaScript交互读取电脑信息
CEF是由Marshall Greenblatt于2008年创建的基于Google Chromium的BSD许可开源项目。与主要关注谷歌Chrome应用程序开发的Chromium项目本身不同,CEF专注于在第三方应用程序中促进嵌入式浏览器用例。CEF通过提供生产质量稳定的API,发布跟踪特定Chromium版本和二进制发行版的分支机构,使用户免受基础Chromium和Blink代码复杂性的影响。CEF中的大多数功能都具有默认实现,这些实现提供丰富的功能,同时几乎不需要用户进行集成工作。目前,全球已有超过1亿个CEF安装实例嵌入到来自各种公司和行业的产品中。CEF维基百科页面上提供了使用CEF的公司和产品的部分列表。CEF的一些用例包括:
心莱科技雪雁
2019/04/22
5.3K0
WMI使用技巧集
WMI使用技巧集 很多的朋友对WMI可能见过但理解不深,我也是十分想了解关于WMI的知识,可一直找不运维
Java架构师必看
2021/03/22
8920
python 获取Linux和Windows硬件信息
接下来讨论一下关于 python-hwinfo, 它是一个展示硬件信息概况的工具之一,并且其配置简洁
py3study
2020/01/07
6.3K0
WPF桌面端开发-音视频录制、获取缩略图(使用OpenCvSharp)
音视频分开录制,音频如果麦克风和扬声器都录制的话,也要分开录制,最后再合并所有的流。
码客说
2023/07/11
1.7K0
判断访问方式添加欢迎信息
希望各位大大可以评论一下小破站 原创文章:https://www.gqink.cn/archives/558/
九霄道长
2021/03/02
6790
【WPF】Toolkit(一个项目)的要点总结
读取系统的显示语言(displayLanguage),显示语言的定义是:假如你的系统现在是中文的,你把它切换到了英文,但是英文的语言包并没有下载下来或者并没有将英文设置为显示语言,那么注销系统再登录之后,你系统显示的将还是中文。此时中文就是显示语言。
全栈程序员站长
2022/11/11
7440
wmic命令解析与实例
描述:wmic.exe是Windows Management Instrumentation,Windows管理工具,提供了从命令行接口和批命令脚本执行系统管理的支持。其不能直接进行执行,需要切换终端到C:\Windows\System32\wbem位置下才能进行调用;
全栈工程师修炼指南
2020/10/26
5.7K0
wmic命令解析与实例
WPF桌面端开发6-Window.Resources
WPF和HTML页面类似用XML进行页面编程,那么上述的模板、CSS和JS放在哪呢?
码客说
2020/05/09
1.6K0
相关推荐
dotnet 通过 WMI 获取系统信息
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验