Visual studio 2010 GetDriveSerialNumber()在使用visual basic 2010的特定计算机上无法正常工作?

Visual studio 2010 GetDriveSerialNumber()在使用visual basic 2010的特定计算机上无法正常工作?,visual-studio-2010,Visual Studio 2010,我正在使用GetDriveSerialNumber()检索visual basic 2010中的驱动器卷序列号 我有以下进口产品: Imports System Imports System.IO Imports System.Text Imports System.Net.NetworkInformation Imports System.Management Imports System.Collections Imports Microsoft.Win32 Imports Microsof

我正在使用GetDriveSerialNumber()检索visual basic 2010中的驱动器卷序列号

我有以下进口产品:

Imports System
Imports System.IO
Imports System.Text
Imports System.Net.NetworkInformation
Imports System.Management
Imports System.Collections
Imports Microsoft.Win32
Imports Microsoft.VisualBasic
然后在模块中:

Dim path As String

   'Get HD volume Serial Number from Function
        Dim DriveVID As String = GetDriveSerialNumber()
功能是:

'Get HD Volume serial Number
Public Function GetDriveSerialNumber() As String
    Dim DriveSerial As Long
    Dim fso As Object, Drv As Object
    'Create a FileSystemObject object
    fso = CreateObject("Scripting.FileSystemObject")
    Drv = fso.GetDrive(fso.GetDriveName(AppDomain.CurrentDomain.BaseDirectory))
    With Drv
        If .IsReady Then
            DriveSerial = .SerialNumber
        Else    '"Drive Not Ready!"
            DriveSerial = -1
        End If
    End With
    'Clean up
    Drv = Nothing
    fso = Nothing
    GetDriveSerialNumber = Hex(DriveSerial)
End Function
这对10台计算机中的9台非常有效

只有一个给了我不同的7个字符

反对它应该给我的8个字

即使我在cmd中键入vol命令

在那台电脑上

它给了我正确的8个字符的卷序列号


有人知道出了什么问题吗?

此功能似乎适用于我所有的测试计算机:

Private Function GetDriveSerialNumber(ByVal drive As String) As String
    Dim driveSerial As String = String.Empty
    Dim driveFixed As String = Path.GetPathRoot(drive)

    driveFixed = Replace(driveFixed, "\", String.Empty)

    Using querySearch As New ManagementObjectSearcher("SELECT VolumeSerialNumber FROM Win32_LogicalDisk Where Name = '" & driveFixed & "'")
        Using queryCollection As ManagementObjectCollection = querySearch.Get()
            Dim moItem As ManagementObject
            For Each moItem In queryCollection

                driveSerial = CStr(moItem.Item("VolumeSerialNumber"))

                Exit For
            Next
        End Using
    End Using

    Return driveSerial
End Function
唯一的问题是你必须给函数发送一个驱动器号,
这对我来说不是问题,

是如何定义GetDriveSerialNumber()的?该信息也是必需的。:)对不起,我忘了添加函数,我刚刚添加了。