如何获取不会改变的硬盘序列号?

howze 2020-09-24 05:44:14
因为要做个收费软件,软件绑定电脑硬件,计划通过硬盘序列号来实现。

我使用的代码如下:



public string GetHardDiskID()
{
//创建ManagementObjectSearcher对象
ManagementObjectSearcher searcher = new ManagementObjectSearcher("SELECT * FROM Win32_PhysicalMedia");

string harddiskID = null;//存储磁盘序列号

//调用ManagementObjectSearcher类的Get方法取得硬盘序列号
foreach (ManagementObject mo in searcher.Get())
{
if (mo["SerialNumber"] != null)
{
harddiskID = mo["SerialNumber"].ToString().Trim();//记录获得的磁盘序列号

break;
}

}

if (harddiskID == null)
{

return “获取失败”;
}
else
{
return harddiskID;
}

}



但是在实际使用过程中发现,win 10 系统在发生系统更新后,这个序列号会变化,这就无法用来做软件授权了。

请问到底该如何获取永远不会变化的硬盘序列号呢?谢谢!
...全文
3582 24 打赏 收藏 转发到动态 举报
写回复
用AI写文章
24 条回复
切换为时间正序
请发表友善的回复…
发表回复
SayoKun 2020-09-30
  • 打赏
  • 举报
回复
其实这个事情可以参考下微软的操作,获取当前设备主要硬件的编码然后结合你的注册码来生成license。每次启动软件时检测一次,如果设备有变更但是数量小于50%然后记录并修改当前已有的license~这样基本就不存在硬件ID改变导致你的license无效。
threenewbee 2020-09-30
  • 打赏
  • 举报
回复
引用 22 楼 SayoKun 的回复:
其实这个事情可以参考下微软的操作,获取当前设备主要硬件的编码然后结合你的注册码来生成license。每次启动软件时检测一次,如果设备有变更但是数量小于50%然后记录并修改当前已有的license~这样基本就不存在硬件ID改变导致你的license无效。

事实证明,微软不是这么操作的,只要更换主板,其余都一样,就要重新激活。除非你是盗版。
howze 2020-09-30
  • 打赏
  • 举报
回复
引用 22 楼 SayoKun 的回复:
其实这个事情可以参考下微软的操作,获取当前设备主要硬件的编码然后结合你的注册码来生成license。每次启动软件时检测一次,如果设备有变更但是数量小于50%然后记录并修改当前已有的license~这样基本就不存在硬件ID改变导致你的license无效。
设备有变更但是数量小于50%?这个思路很厉害啊? 意思是比如记录了硬盘、CPU、mac地址、BIOS的ID,以及主板 这时候如果硬盘和mac地址变了,数量小于50%,意味着设备没换? 可以自动更新授权?
threenewbee 2020-09-27
  • 打赏
  • 举报
回复
再给你一个思路 用电话号码+身份证号(个人)或者企业执照编号(企业)+购买使用的bank帐号或者zfb帐号 联合起来作为条件,产生注册码 注册码通过下发到手机短信的方式提供 一般人不会为了盗版把自己的这些信息告诉别人吧。
howze 2020-09-27
  • 打赏
  • 举报
回复
引用 16 楼 xinbada1985 的回复:
[quote=引用 14 楼 howze 的回复:][quote=引用 13 楼 xinbada1985 的回复:]就是拿这个文件,作为硬盘序列号的标识,只要机器上没有这个文件,就视为没授权
但是还有个核心问题,就是当用户重装系统,或者不小心误删了这个文件,就导致授权失败,而且还没办法恢复,因为这个guid很难生成同样的,这时候咋办,总不能不让用户重装系统吧[/quote] 一个小程序不用考虑那么多!重做系统你就重新给他授权一下呗,也不会没事就重做系统。用硬盘,他还可能换硬盘啊!用mac地址,他可能换网卡,后期维护在说维护的事。不要想那么太多,没有百分之百安全的程序,就看你的取舍了!哪个方向你觉着更合适。[/quote] 如果这样随便就给重新授权,那无数人都以重装系统为理由替未购买的人要授权,我咋办
xinbada1985 2020-09-27
  • 打赏
  • 举报
回复
引用 14 楼 howze 的回复:
[quote=引用 13 楼 xinbada1985 的回复:]就是拿这个文件,作为硬盘序列号的标识,只要机器上没有这个文件,就视为没授权
但是还有个核心问题,就是当用户重装系统,或者不小心误删了这个文件,就导致授权失败,而且还没办法恢复,因为这个guid很难生成同样的,这时候咋办,总不能不让用户重装系统吧[/quote] 一个小程序不用考虑那么多!重做系统你就重新给他授权一下呗,也不会没事就重做系统。用硬盘,他还可能换硬盘啊!用mac地址,他可能换网卡,后期维护在说维护的事。不要想那么太多,没有百分之百安全的程序,就看你的取舍了!哪个方向你觉着更合适。
xinbada1985 2020-09-27
  • 打赏
  • 举报
回复
引用 17 楼 howze 的回复:
[quote=引用 16 楼 xinbada1985 的回复:][quote=引用 14 楼 howze 的回复:][quote=引用 13 楼 xinbada1985 的回复:]就是拿这个文件,作为硬盘序列号的标识,只要机器上没有这个文件,就视为没授权
但是还有个核心问题,就是当用户重装系统,或者不小心误删了这个文件,就导致授权失败,而且还没办法恢复,因为这个guid很难生成同样的,这时候咋办,总不能不让用户重装系统吧[/quote] 一个小程序不用考虑那么多!重做系统你就重新给他授权一下呗,也不会没事就重做系统。用硬盘,他还可能换硬盘啊!用mac地址,他可能换网卡,后期维护在说维护的事。不要想那么太多,没有百分之百安全的程序,就看你的取舍了!哪个方向你觉着更合适。[/quote] 如果这样随便就给重新授权,那无数人都以重装系统为理由替未购买的人要授权,我咋办[/quote] 你可以限定他1年有1到2次重新申请的机会!防止他重装或换机器!多了你们就不负责了!那样他就不会有这样的问题了,毕竟他要把重新申请的机会留给自己,楼上说的是也好办法!不过你一个单机绿色版小程序没必要做那么多。
泡泡龙 2020-09-27
  • 打赏
  • 举报
回复
用api,可以获取和EVERESTUltimateEdition一样的序列号
大鱼> 2020-09-27
  • 打赏
  • 举报
回复
就像楼上老马说的,以注册的形式进行,这样好控制些,一个账户只能同时允许一个登陆
Yofoo 2020-09-25
  • 打赏
  • 举报
回复
从系统的设备管理先检查下实际的序列号, 跟获取的序号是否一致
xinbada1985 2020-09-25
  • 打赏
  • 举报
回复
引用 6 楼 howze 的回复:
[quote=引用 5 楼 xinbada1985 的回复:]这个好解决!做一个license授权,就可以达到一对一绑定,拿到别处也不会好用
我就是做的license授权,但绑定硬件,这时候就必须要读取设备信息了[/quote] 不推荐硬件的原因是硬件不稳定性太高!
xinbada1985 2020-09-25
  • 打赏
  • 举报
回复
引用 6 楼 howze 的回复:
[quote=引用 5 楼 xinbada1985 的回复:]这个好解决!做一个license授权,就可以达到一对一绑定,拿到别处也不会好用
我就是做的license授权,但绑定硬件,这时候就必须要读取设备信息了[/quote] 不一定非要硬件信息!我上边说的!也可以在软件安装的时候生成一个唯一的key
xinbada1985 2020-09-25
  • 打赏
  • 举报
回复
原理就是在软件安装的时候生成一个随机ID,然后通过这个随机id生成一个license授权文件!哪怕安装文件拿到别的机器安装,没有license授权文件,也没办法用
howze 2020-09-25
  • 打赏
  • 举报
回复
引用 5 楼 xinbada1985 的回复:
这个好解决!做一个license授权,就可以达到一对一绑定,拿到别处也不会好用
我就是做的license授权,但绑定硬件,这时候就必须要读取设备信息了
xinbada1985 2020-09-25
  • 打赏
  • 举报
回复
这个好解决!做一个license授权,就可以达到一对一绑定,拿到别处也不会好用
howze 2020-09-25
  • 打赏
  • 举报
回复
引用 2 楼 by_封爱 的回复:
电脑上面的一切东西 都可以模拟...什么网卡 序列号 如果从根本来说 这些都不行.. 上U盾 这种才是"唯一"的解决方案
版主说的我何尝不明白,但是个人开发的小软件,再去搞个优盾,感觉实在没必要啊
howze 2020-09-25
  • 打赏
  • 举报
回复
引用 1 楼 贵阳老马马善福专业维修游泳池堵漏防水工程 的回复:
你是不是有多个硬盘(固态、机械) 所以会“变化” 实际上是获取到了不同的硬盘的序列号 另外就是开了hyper-v后获取的是虚拟设备,这个可能也不同 代码本身没问题
是吧,我也觉得代码本身没问题,硬盘就一块啊,也没开啥hyper-v,所以我才会奇怪,关键是以前使用正常,就是昨天系统更新后,发现不一样了。
by_封爱 版主 2020-09-25
  • 打赏
  • 举报
回复
电脑上面的一切东西 都可以模拟...什么网卡 序列号 如果从根本来说 这些都不行.. 上U盾 这种才是"唯一"的解决方案
圣殿骑士18 2020-09-25
  • 打赏
  • 举报
回复
如果用户破解你的程序的积极性不高,就用mac地址验证也行。如果用户会破解你的程序,那还是上u盾吧,值得这么去做。淘宝上买一个ukey也就10块钱。
howze 2020-09-25
  • 打赏
  • 举报
回复
引用 13 楼 xinbada1985 的回复:
就是拿这个文件,作为硬盘序列号的标识,只要机器上没有这个文件,就视为没授权
但是还有个核心问题,就是当用户重装系统,或者不小心误删了这个文件,就导致授权失败,而且还没办法恢复,因为这个guid很难生成同样的,这时候咋办,总不能不让用户重装系统吧
加载更多回复(4)
  是一款USB设备芯片型号检测工具,可以自动查询U盘、MP3/MP4、读卡器、移动硬盘等的主控芯片型号、制造商、品牌、并提供相关资料下载地址。当然也可以查询USB设备的VID/PID信息、设备名称、序列号、设备版本等。   软件绿色小巧,即插即用,是数码消费者、电子爱好者、DIY人士和数码维修人员身边的好帮手。   我们还将在后续版本中完善更多功能....... -------------------------------------- 应用举例: 1、快速修复U盘:不用拆机即可查询U盘的芯片型号,快速找到对应的量产工具 2、帮你识别假冒U盘:还怕买到假冒U盘吗?随时带上我吧 3、专业选购MP3:MP3主控方案一般厂家都不说,而方案又是选购MP3的重要指标 4、识别假IPOD:我一直怀疑自已的IPOD是假的,又无法拆开,这个任务交给我搞定 5、维修好帮手:数码维修人员整天和数码产品打交道,我的出现就是你的得力助手 6、其它USB存储:买读卡器、移动硬盘、USB-Hub....,从专业角度帮你挑选对比 7、其它USB外设:摄像头、USB鼠标、打印机、USB声卡....,免拆壳哦 8、电脑主板芯片组:看芯片型号、找驱动、查主板性能,有我更轻松 9、后续还有更多神秘功能,等你来发掘...... -------------------------------------- 版本更新: v2.30 1、更正了在Win2000系统下对带有虚拟光盘的U盘支持不好的问题 2、对于同一设备带有多个序列号的情况(每个盘符对应的设备序列号不同)能够分别准确识别 3、修正了多盘符驱动器(如多合一读卡器之类)时列表混乱的问题 4、进一步优化视觉体验,改进了提示设备名称的算法,更美观 v2.20 1、改变界面显示算法,彻底摆脱了巨大而且烦人的OCX文件! 2、修正两个关于界面的小bug 3、增加了鼠标指向超长的设备名称时弹出提示标签显示设备完整名称 V2.10 进一步优化系统资源占用率 V2.03 1.识别包含虚拟光盘的设备不需重新插拔即可得到虚拟光盘的盘符 2.从根本上杜绝了盘符出现[*:]的问题,只要Windows认盘,ChipGenius就能识别,识别过程中某些情况偶尔出现[*:],不过几秒之内一定能得到正确的盘符 3.改进了界面一个小bug,在Win2000下显示更清爽(因为旧版本在某些情况下显示会一团糟……) V2.01 1.改进了识别算法,获取驱动器号的速度加快n倍 2.在精简版WindowsXP下实现实时监测设备插入拔出 3.大大降低了静态时的CPU占用率(从原来的40%左右降低到小于10%) 4.专门针对多盘符设备优化,大大加快了检测多合一读卡器的速度 5.优化界面显示,不会出现字符串长到文本框外面去的问题 V1.70 优化了数据库装载,加快启动速度。增加了一个节日彩蛋^_^ V1.68 修正一处小Bug,微调了软件界面 V1.67 支持在WinXP精简版下运行 V1.59 增加设备版本查询,增加相关方案资料下载链接地址 V1.50 增强了对带有虚拟光盘的U盘识别能力,修改了两个小Bug -------------------------------------- 使用声明: 我们不保证ChipGenius检测信息的准确性,查询结果仅供参考。

110,546

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧