title author date CreateTime categories
C# 获取 PC 序列号
lindexi
2019-08-31 16:55:58 +0800
2018-7-30 10:31:9 +0800
dotnet C# WMI

在 C++ 需要使用 GetSystemFirmwareTable 的方法来获得 PC 的序列号,需要写的代码很多,但是在 C# 可以使用 WMI 来拿到序列号

首先是安装 System.Management ,安装了这个库,在 dotnet framework 和 dotnet core 都可以使用本文的方法获取 PC 的序列号

安装 System.Management 的方法是通过 Nuget 搜索System.Management然后安装,如果使用的是VisualStudio 2017项目格式就可以复制下面代码到项目文件

    <PackageReference Include="System.Management" Version="4.5.0" />

我比较喜欢第二个方法来安装,因为这个速度比较快

安装完成使用 WMI 拿到序列号需要的代码很少,请看下面

                var search = new ManagementObjectSearcher("SELECT * FROM Win32_BIOS");
var mobos = search.Get();
foreach (var temp in mobos)
{
object serial = temp["SerialNumber"]; // ProcessorID if you use Win32_CPU
pcsn = serial.ToString();
Console.WriteLine(pcsn);
}

这样就可以拿到序列号,但是可能有些设备是没有序列号,很多时候是返回下面代码

To be filled by O.E.M
To be filled by O.E.M.
Default
Default string

上面代码最后一行就是空白,所以需要先做判断是不是存在序列号,所有代码请看下面

       /// <summary>
/// 获得pc号
/// </summary>
public static string GetPcsnString()
{
var pcsn = "";
try
{
var search = new ManagementObjectSearcher("SELECT * FROM Win32_BIOS");
var mobos = search.Get();
foreach (var temp in mobos)
{
object serial = temp["SerialNumber"]; // ProcessorID if you use Win32_CPU
pcsn = serial.ToString();
Console.WriteLine(pcsn); if
(
!string.IsNullOrEmpty(pcsn)
&& pcsn != "To be filled by O.E.M" //没有找到
&& !pcsn.Contains("O.E.M")
&& !pcsn.Contains("OEM")
&& !pcsn.Contains("Default")
)
{
break;
}
else
{
Console.WriteLine("默认值");
}
}
}
catch (Exception e)
{
Debug.WriteLine(e);
// 无法处理
} return pcsn;
}

需要知道,使用这个方法获取 序列号是比较耗性能的,建议放在其他线程获取

2019-8-31-C#-获取-PC-序列号的更多相关文章

  1. C# 获取 PC 序列号

    在 C++ 需要使用 GetSystemFirmwareTable 的方法来获得 PC 的序列号,需要写的代码很多,但是在 C# 可以使用 WMI 来拿到序列号 首先是安装 System.Manage ...

  2. C# 获取CPU序列号、网卡MAC地址、硬盘序列号封装类,用于软件绑定电脑

    using System.Management; namespace GLaLa { /// <summary> /// hardware_mac 的摘要说明. /// </summ ...

  3. C# 中获取CPU序列号/网卡mac地址

    1.cpu序列号2.mac序列号3.硬盘id在给软件加序列号时这三个应该是最有用的,可以实现序列号和机器绑定,对保护软件很有好处.哈哈.   using System; using System.Ma ...

  4. C#获取cpu序列号 硬盘ID 网卡硬地址以及操作注册表 .

    转:http://blog.csdn.net/smartsmile2012/article/details/8682295 #region 获取cpu序列号 硬盘ID 网卡硬地址 /**/ /// & ...

  5. java通过jni方式获取硬盘序列号(windows,linux)

    linux系统java通过jni方式获取硬盘序列号 http://blog.csdn.net/starter110/article/details/8186788 使用jni在windows下读取硬盘 ...

  6. delphi 获取硬盘序列号、cpu号、bios号、网卡号

    delphi 获取硬盘 序列号 function GetIdeNum: String; type TSrbIoControl = packed record HeaderLength : ULONG; ...

  7. 原生js获取pc和移动端屏幕宽、高的方法

    pc端: var w = window.innerWidth || document.documentElement.clientWidth || document.body.clientWidth; ...

  8. Windows 下获取硬盘序列号

    只获取序列号 以下任意一条命令都可以: wmic diskdrive get serialnumber wmic path win32_physicalmedia get SerialNumber w ...

  9. 获取硬盘序列号的Fortran程序

    以前写了个获取硬盘序列号的fortran程序,但未经实证 program FortranDemo Use Kernel32 Implicit None Interface SUBROUTINE Get ...

  10. 获取CPU序列号、网卡MAC地址、硬盘序列号

    <pre name="code" class="csharp"> using System; using System.Collections; u ...

随机推荐

  1. bzoj3732 Network(NOIP2013 货车运输)

    Description 给你N个点的无向图 (1 <= N <= 15,000),记为:1…N. 图中有M条边 (1 <= M <= 30,000) ,第j条边的长度为: d_ ...

  2. python 并发之进程

    一.什么是进程 进程(Process)是计算机中的程序关于某数据集合上的一次运行活动,是系统进行资源分配和调度的基本单位,是操作系统结构的基础.在早期面向进程设计的计算机结构中,进程是程序的基本执行实 ...

  3. mysql把一个表的字段update成另一个表的字段根据id

    mysql把一个表的字段update成另一个表的字段根据id 1.填充activity表里面的creator字段,用org的founderid,其中activity的orgid要和org的id对应,具 ...

  4. Session机制在页面间保持Cookie——大街网

    解决Cookie有效期,页面间Cookie传递 解決大规模,长期有效采集. 之前做一个项目,要采集招聘网站的职位信息,智联,拉钩,中华英才,BOOS,大街网,写完了前4个,大街网数据加载方式是AJAX ...

  5. 08查找满足条件的n个数

    第一节.寻找和为定值的两个数 题目:输入一个数组和一个数字,在数组中查找两个数,使得它们的和正好是输入的那个数字.要求时间复杂度是O(n).如果有多对数字的和等于输入的数字,输出任意一对即可. 例如输 ...

  6. OpenStack项目及组件功能简单介绍

    核心项目3个 1.控制台 服务名:Dashboard 项目名:Horizon 功能:web方式管理云平台,建云主机,分配网络,配安全组,加云盘 2.计算 服务名:计算 项目名:Nova 功能:负责响应 ...

  7. JVM参数详细列表

    -client :设置JVM使用client模式,特点启动较快(神机不明显(I5/8G/SSD)) -server :设置JVM使用server模式.64位JDK默认启动该模式 -agentlib:l ...

  8. @hdu - 6372@ sacul

    目录 @description@ @solution@ @accepted code@ @details@ @description@ 定义矩阵 \(A_i\) 是一个大小为 \(p^i*p^i\) ...

  9. iptables智能DNS

    1. echo 1 > /proc/sys/net/ipv4/ip_forward 2. 在NAT服务器上添加以下规则: 在PREROUTING链中添加目的地址转换规则: iptables -t ...

  10. CondaHTTPError: HTTP 000 CONNECTION FAILED

    [root@localhost ~]# conda install samtools Solving environment: failed CondaHTTPError: HTTP 000 CONN ...