c# - 带有 WMIService 的硬盘驱动器序列号是否可以更改?
问题描述
我使用硬盘驱动器序列号检查来注册我的产品。
但我看到有时它正在改变。客户激活产品仅 2 周后,硬盘驱动器的 Serial-Num 就发生了变化。
这个属性是可变的吗?如果是这样,它是如何改变的,为什么改变?
这是我在VB中使用的代码:
Dim WMIService As Object, Items As Object, SubItems As Object, temp
Set WMIService = GetObject("winmgmts:\\" & "." & "\root\cimv2")
Set Items = WMIService.ExecQuery("Select * from Win32_PhysicalMedia", , 48)
For Each SubItems In Items
temp = SubItems.SerialNumber
If LenB(temp) Then Exit For
Next
和我在 C# 中使用的相同的东西
using System.Management;
public string GetHDDSerial()
{
ManagementObjectSearcher searcher = new ManagementObjectSearcher("SELECT * FROM Win32_PhysicalMedia");
foreach (ManagementObject wmi_HD in searcher.Get())
{
// get the hardware serial no.
if (wmi_HD["SerialNumber"] != null)
return wmi_HD["SerialNumber"].ToString();
}
return string.Empty;
}
解决方案
感谢FunThomas的评论,并在与我的客户进行了一些故障排除后,我发现他有时会使用外部驱动器来获得更多空间,并且当插入外部驱动器时 - 我得到了不同的 HDD 序列号。
现在我已经想出了如何从当前驱动器号中获取序列号。
这是VB的代码:
Dim WMIService As Object, DiskDrives As Object, Drive As Object, DiskPartitions As Object, Partition As Object, SerialNumber, currentDrive
currentDrive = Environ("HomeDrive")
Set WMIService = GetObject("winmgmts:\\" & "." & "\root\cimv2")
Set DiskPartitions = WMIService.ExecQuery("ASSOCIATORS OF {Win32_LogicalDisk.DeviceID='" & currentDrive & "'} WHERE ResultClass=Win32_DiskPartition")
For Each Partition In DiskPartitions
Set DiskDrives = WMIService.ExecQuery("ASSOCIATORS OF {Win32_DiskPartition.DeviceID='" & Partition.DeviceID & "'} WHERE ResultClass=Win32_DiskDrive")
For Each Drive In DiskDrives
Debug.Print "Caption: " & Drive.Caption, "Description: " & Drive.Description, "Name: " & Drive.Name, "Model: " & Drive.Model, "SerialNumber: " & Drive.SerialNumber
SerialNumber = Drive.SerialNumber
Next
Next
推荐阅读
- php - Magento2 不为客户保存自定义属性
- reactjs - React Hooks:函数应该定义在函数内还是函数外?
- java - Spring RestTemplate Mapping JSON 响应 Map 抛出 MismatchedInputException
- javascript - 根据 Javascript 中的值显示不同的“p”标签
- flutter - 更新事件后流值不会改变.. (Flutter,bloc)
- powerbi - 使用度量显示两个日期之间的值
- mysql - 仅当记录数大于 N 时 SQL SELECT 才显示记录
- laravel - laravel 验证无法正常工作
- r - R markdown PDF 文件中的内联代码未正确显示
- c# - 如何检查 SqlCommand 是否在事务中