首页 > 解决方案 > 带有 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;
}

标签: c#vba

解决方案


感谢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

推荐阅读